美文网首页程序员
我肝了一个星期,为你们整理出了mybatis程序配置教程

我肝了一个星期,为你们整理出了mybatis程序配置教程

作者: 程序员麦冬 | 来源:发表于2020-07-23 15:00 被阅读0次

    1、搭建实验数据库

    • 我们创建一个mybatis实验数据库,并创建一个user表为后续实验准备
    CREATE DATABASE `mybatis`;
    USE `mybatis`;
    CREATE TABLE `user`(
    `id` INT(4) NOT NULL PRIMARY key,
    `name` VARCHAR(20) NOT NULL,
    `pwd` VARCHAR(20) NOT NULL
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    INSERT INTO `user` VALUE
    (1,'zsr','200024'),
    (2,'gcc','000421'),
    (3,'bareth','123456');
    

    2、IDEA新建项目,连接数据库

    • 新建一个普通的maven项目
    • 删除src目录,作为父工程
    • pom.xml中导入相关的maven依赖
    1. MySQL驱动
    2. MyBatis驱动
    3. junit驱动
    <!--导入依赖-->
    <dependencies>
    <!--MySQL驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
    </dependency>
    <!--MyBatis驱动-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
    </dependency>
    <!--junit驱动-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    
    • 连接我们的MySQL
    image
    2.jpg

    选择我们前面创建的数据库mybatis并打开

    image image

    3、编写MyBatis核心配置文件

    • 创建一个子模块maven_study01
    image
    • 在该模块的resource目录下,新建mybatis-config.xml文件,这是MyBatis核心配置文件
    image
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://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.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="200024"/>
    </dataSource>
    </environment>
    </environments>
    </configuration>
    

    注意:以下部分换成自己的数据库信息

    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    

    4、编写MyBatis工具类

    • 在子模块maven_study01/src/main/java目录下,新建一个utils工具类包,新建MyBatisUtils类
    • 该类用来从 XML 中构建 SqlSessionFactory
    image
    package 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;
    //从 SqlSessionFactory 中获取 SqlSession
    public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
    try {
    //获取SqlSessionFactory对象
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    //从 SqlSessionFactory 中获取 SqlSession
    public static SqlSession getSqlSession() {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    return sqlSession;
    }
    }
    

    5、创建表对应实体类

    数据库中每个表的每一行对应了一个实体类对象,这里我们对前面创建的user表创建对应的实体类

    • 在maven_study01/src/main/java目录下,新建pojo实体类包,其中新建User类
    image
    package pojo;
    public class User {
    private int id;
    private String name;
    private String pwd;
    public User() {
    }
    public User(int id, String name, String pwd) {
    this.id = id;
    this.name = name;
    this.pwd = pwd;
    }
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPwd() {
    return pwd;
    }
    public void setPwd(String pwd) {
    this.pwd = pwd;
    }
    @Override
    public String toString() {
    return "User{" +
    "id=" + id +
    ", name='" + name + '\'' +
    ", pwd='" + pwd + '\'' +
    '}';
    }
    }
    

    6、编写Mapper接口

    在maven_study01/src/main/java目录下,新建mapper包,其中新建UserMapper接口

    • 其中抽象方法 getUserList() 用来返回User对象的集合
    package mapper;
    import pojo.User;
    import java.util.List;
    public interface UserMapper {
    List<User> getUserList();
    }
    
    image

    7、编写Mapper.xml配置文件

    在子模块/src/main/java/mapper下,新建UserMapping.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="mapper.UserMapper">
    <select id="getUserList" resultType="pojo.User">
    select * from mybatis.user
    </select>
    </mapper>
    
    • namespace = 自己创建Mapper接口
    • id = 对应Mapper接口的方法名
    • resultType = 返回结果类型
    • select 中间是sql语句
    image

    8、编写junit测试类

    在maven_study01/test/java下新建mapper包,该包下新建测试类UserMapperTest

    • junit测试
    package mapper;
    import mapper.UserMapper;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    import pojo.User;
    import utils.MyBatisUtils;
    import java.util.List;
    public class UserMapperTest {
    @Test
    public void test() {
    //获取sqlSession对象
    SqlSession sqlSession = MyBatisUtils.getSqlSession();
    //执行SQL
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
    System.out.println(user);
    }
    //关闭sqlSession
    sqlSession.close();
    }
    }
    
    image

    9、给Mapper.xml添加注册

    每一个Mapper.xml都需要在MyBatis核心配置文件中注册

    我们要在mybatis-config.xml中进行注册,最后加上以下代码

    <!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
    <mappers>
    <mapper resource="mapper/UserMapping.xml"/>
    </mappers>
    

    这里的路径是我们定义的xml配置文件的路径

    注意:该路径的中要用/进行分隔

    image

    10、测试运行

    我们点击运行测试类UserMapperTest,成功!

    image

    发现他提示我们驱动类名已经遗弃,我们利用他给的新驱动名即可,

    在MyBatis核心配置文件中,将驱动名更换为以下即可

    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    

    </pre>

    再测试,没有错误~

    image

    11、可能遇到的问题

    • 配置文件没有注册
    1. 每一个Mapper.xml都需要在MyBatis核心配置文件中注册
    • 绑定接口不对,方法名不对,返回类型不对
    1. 对应如图所示三个参数
    image
    • maven配置文件无法被导出或生效
    image

    maven默认资源文件配置在resource目录下,但是我们放在了java目录下,该目录下无法导出,所以需要手动配置资源过滤,让src/main/java下的 .properties 或 .xml 可以导出

    解决方案是:将以下设置写在pom.xml中

    <!--在build中配置resources,防止我们资源导出失败的问题-->
    <build>
    <resources>
    <resource>
    <directory>src/main/resources</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>
    </build>
    

    12、步骤作用及总结

    对整个过程进行总结,可分为七大步骤:

    1. 编写MyBatis核心配置xml文件,其中包括了获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)
    2. 编写MyBatis工具类,加载上述xml文件,从该xml文件中构建 SqlSessionFactory,再从 SqlSessionFactory 中获取 SqlSession,SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    3. 创建数据库表对应的实体类,把JavaBean的属性和数据库表的字段自动关联起来
    4. 编写一个Mapper接口,定义抽象方法用来执行下述Mapper.xml配置中文件中的 SQL
    5. 编写Mapper.xml配置文件,绑定上述Mapper接口,以及对应的抽象方法
    6. 在MyBatis核心配置xml文件中给Mapper.xml配置文件添加注册
    7. 编写junit测试类测试

    感谢你看到这里,我是程序员麦冬,一个java开发从业者,深耕行业六年了,每天都会分享java相关技术文章或行业资讯

    欢迎大家关注和转发文章,后期还有福利赠送!

    相关文章

      网友评论

        本文标题:我肝了一个星期,为你们整理出了mybatis程序配置教程

        本文链接:https://www.haomeiwen.com/subject/qghhlktx.html