IDEA Java 第一个mybatis入门程序

news2024/11/17 5:42:11

文章目录

  • 准备
    • mysql
  • 开始
    • 新建maven项目
    • maven添加引用
    • mybatis配置文件
    • 工具类
    • 创建实例类
    • 添加mapper
      • mapper
      • mapper.xml
    • 测试类
  • 发现问题
    • org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.
    • The error may exist in com/cpyy/mapper/UserMapper.xml
  • 参考

准备

Java 18
mysql 8
maven
idea

mysql

准备数据

CREATE DATABASE `mybatis`;

USE `mybatis`;

CREATE TABLE `user`(
`id` int not null PRIMARY KEY,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL
)ENGINE=INNODB,CHARSET=utf8;

INSERT INTO `mybatis`.`user` (`id`, `name`, `pwd`) 
VALUES 
(1, 'haha', '123'),
(2, 'lala', '123'),
(3, 'xixi', '1234');

开始

新建maven项目

这个就不用详细说了
新建maven项目,然后新建一个module作为第一个mybatis程序
整体文件目录如下
在这里插入图片描述

maven添加引用

在外面一层的pom添加引用
mysql-connect
mybatis
junit(用于测试代码)

<dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

mybatis配置文件

在resource文件夹下添加mybatis配置文件mybatis-config.xml
mappers页签中的内容可以先不写,等创建mapper后再添加

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTime=Asia/shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/cpyy/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

工具类

创建utils工具类,方便代码复用

package com.cpyy.utils;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

创建实例类

创建实体类,和mysql表中的信息保持一致
(未包含构造器等代码)

public class User {
    private int id;
    private String name;
    private String pwd;
}

添加mapper

创建mapper后可以在mybatis-config.xml中补充相应内容

mapper

package com.cpyy.mapper;

import com.cpyy.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}

mapper.xml

mapper.xml中的namespace为上方mapper的路径

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cpyy.mapper.UserMapper">
    <select id="getUserList" resultType="com.cpyy.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

测试类

在test目录中创建测试类,可以直接进行测试

package com.cpyy.mapper;

import com.cpyy.pojo.User;
import com.cpyy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {

    @Test
    public void getUserListTest() {

        try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();

        }

    }
}

正常结果如下
在这里插入图片描述

发现问题

org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.

在这里插入图片描述
在mybatis-config.xml中没有记录mapper信息,补充即可

The error may exist in com/cpyy/mapper/UserMapper.xml

找不到文件
在target中没有对应的UserMapper.xml文件,没有进行导出

在pom文件中添加文件过滤的内容

    <build>
        <resources>
            <resource>
                <directory>src/main/resource</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

参考

mybatis官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/486339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

一、前言 这是本专栏的倒数第二篇文章了&#xff0c;为什么不是最后一篇&#xff1f;因为我要单独写一篇总结哈哈&#xff0c;不管怎么说&#xff0c;从今年的3.13的MVP变换开始写&#xff0c;写到现在&#xff0c;也是一个很大的工程了&#xff0c;我很高兴能在大二下学期的期…

使用ffmpeg拼接两张图片

最近在工作中遇到了一个需求&#xff0c;就是需要将两张图片拼接在一起&#xff0c;作为一个封面图。如果只是临时拼接一张&#xff0c;我们可以只用photoshop之类的图片编辑工具&#xff0c;将两张图片拼接在一起。而我们的需要是需要实现自动化&#xff0c;由于之前使用过ffm…

KALI入门到高级【第六章】

预计更新第一章 入门 1.1 什么是Kali Linux&#xff1f; 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 特…

Linux网络编程:基础知识

1. MAC地址和IP地址 IPV4&#xff1a;32位&#xff1b;8B 4 32bit IPV6:128位&#xff1b;4B 32 128bit&#xff0c;图中IPV6补全为&#xff1a;fe80:0000:0000:0000:6e3f:77c3:ceca:b5a7 MAC&#xff1a;48位; 4B 12 48bit (图中IPV6和MAC地址使用的16进制表示法&a…

QTDAY4

定时闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> //定时器类 #include <QTime> //时间类 #include <QTimerEvent> //定时器事件类 #include <QDateTime> //日期时间类 #include <QText…

052、牛客网算法面试必刷TOP101--二分查找/排序(230503)

文章目录 前言二分查找/排序1、BM17 二分查找-I2、BM18 二维数组中的查找3、BM19 寻找峰值4、BM20 数组中的逆序对5、BM21 旋转数组的最小数字6、BM22 比较版本号 总结 前言 本文记录自己刷&#xff0c;牛客网的面试必刷TOP101&#xff0c;地址&#xff1a;面试必刷TOP101–二…

【GAMES101】05 Rasterization(Triangles)

光栅化过程&#xff1a;将一系列变换后的三角形转换为像素的过程。 三角形在图形学中得到很多的应用。 最基础的多边形&#xff08;边数最少&#xff09;。任何多边形都可以拆成三角形。性质&#xff1a;三角形内部一定是平面的。三角形内外部定义非常清楚。定义三个顶点后&a…

libfacedetection 人脸检测库 检测速度慢的问题

目录 一、libfacedetection 性能介绍 英特尔CPU 使用AVX2指令集 使用AVX512指令集 嵌入式设备 二、加速检测速度 libfacedetetion的前向推理速度很快的原因 使用axv2加速指令 一、libfacedetection 性能介绍 在上一篇文章中&#xff0c;我发现使用摄像头检测&#xff0c;构…

C++入门——内联函数的介绍

目录 前言 内联函数 1. 概念 2.特性 前言 今天小编给大家带来的是内联函数的介绍&#xff0c;大家可能之前没有听过内联函数这个名词&#xff0c;那么今天就和小编一起认识一下这个朋友吧。 内联函数 我们每次在调用函数时都会开辟一个函数栈帧&#xff0c;那么过度的函数…

上海联影面试(部分)(未完全解析)

一面 Spring Boot为什么可以自启动&#xff0c;且变成一个web项目&#xff1f;本地连不上网&#xff0c;Maven缺一个jar包&#xff0c;怎么解决&#xff1f;linux用什么命令找到占用指定端口的进程&#xff0c;并杀掉&#xff1f;Answer by new bing: 查找被占用端口的PID&am…

单载波传输与多载波传输

一、单载波传输 1. 单载波基带传输&#xff1a;系统模型 信道h(t)的带宽为W T&#xff1a;符号周期&#xff0c;数据速率&#xff1a;R1/T&#xff0c;每秒传输R个符号&#xff0c;单位&#xff1a;Hz z(t)&#xff1a;加性噪声 g(t)带宽有限&#xff0c;时间无限&#xff0c…

AI 图像生成工具可以取代摄影师吗?让我们从原理开始聊聊

AI 的风已经吹向了每一个人&#xff0c;在这篇文章中我们一起来聊一聊 AI 图像生成的原理以及未来。 作为一个非职业的摄影爱好者&#xff0c;我通常会在 Instagram 上面搜罗各种各样的优质图片并将其放进我的收藏夹。其中&#xff0c;有一位我关注了很久的德国摄影师&#xff…

Linux常用快捷键

前言&#xff1a;由于需要&#xff0c;梳理了一下常用的快捷键&#xff0c;以便忘记时查找。 Linux系统快捷键&#xff1a;(Bash解释器) 1&#xff09;Tab键 补齐命令补齐路径显示当前目录下的所有目录 2&#xff09;清屏&#xff1a; clearCtrl L ( “L” 大小写均可 ) …

Cadence基础操作:ADE L仿真基础操作

仿真器启动 schematic视图左上角 launch 启动各种仿真器&#xff0c;ADE L界面左上角Launch 启动ADL XL 和ADE GXL。通过ADE L启动的ADEXL 会继承ADE L的各种设置&#xff0c;如变量、plot and save的点等等。 仿真器主要设置 1.仿真器选择&#xff1a;如图&#xff0c;Setup里…

Linux进程初识

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 Linux进程初识目录 前言正文冯诺依曼体系结构操作系统简介概念操作系统的管理系统调用 进程初识进程理解进程的属性和数据进程控制块查询进程信息的相关指令进程PID 父…

机器学习笔记 Segment Anything用于图像分割的通用大模型

一、简述 人工智能中的基础模型正变得越来越重要。它们被定义为在大量数据上训练的大型人工智能模型,可以适应广泛的任务。 基础模型的早期例子是大型语言模型(LLM),如GPT和BERT。随后,该行业也看到了同样的想法被应用于多模态基础模型,如DALLE、CLIP等。基础模型这个术语…

基于深度神经网络的图像分类与训练系统(MATLAB GUI版,代码+图文详解)

摘要&#xff1a;本博客详细介绍了基于深度神经网络的图像分类与训练系统的MATLAB实现代码&#xff0c;包括GUI界面和数据集&#xff0c;可选择模型进行图片分类&#xff0c;支持一键训练神经网络。首先介绍了基于GoogleNet、ResNet进行图像分类的背景、意义&#xff0c;系统研…

S3C6410 中的 cascaded irqdomain 之 gpio

文章目录 VIC 中断 与 gpio 中断 的硬件拓扑图描述linux cascaded irq domainirq domain 初始化时获取 IRQ number(软件中断号) 时中断发生时如何调试linux irq domain 实例 VIC domain 与 gpio domain 的硬件拓扑语言描述VIC 与 INT_EINTx 的关系INT_EINTx 与 GPIO的关系INT_E…

python+excel的接口自动化测试框架实战教程(视频讲解+源码)

目录 设计流程图 Excel和结果预览 框架结构 Excel相关 日志封装 正则操作 核心操作 测试操作 测试报告发送邮件类 运行 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方…