0%

MyBatis基础

记录一下MyBatis的理解

之前没学过MyBatis,只看过狂神说的教程,虽然能跟着视频敲一个MyBatis的程序出来,但是对具体的步骤还是很困惑,来梳理一下。只是梳理过程,不涉及细节,例如settings等设置

创建MyBatis的步骤
  1. 下载并部署jar包,这个在maven中实现

  2. 编写MyBatis核心配置文件:mybatis-config.xml

  3. 创建实体类:POJO (对象的属性字段(一般是private)以及getter、setter、toString基本方法)

  4. 创建DAO接口:自己想要实现的方法,进行定义,不需要实现

    • public User selectUser(int userID);
    • public void insertUser(User user);
  5. 创建SQL映射文件:mapper.xml,实现的是DAO中的接口方法

    1
    2
    3
    <select id="selectUser" resultType="User">
    select * from UserSQL where UserID = #{userID}
    </select>
  6. 创建测试类:SqlSessionFactoryBuilder...

MyBatis三个基本元素:
  • 核心接口和类
  • MyBatis核心配置文件 (mybatis-config.xml)
  • SQL映射文件 (mapper.xml)
核心配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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><!-- 配置 -->
<properties /><!-- 属性 -->
<settings /><!-- 设置 -->
<typeAliases /><!-- 类型命名 -->
<typeHandlers /><!-- 类型处理器 -->
<objectFactory /><!-- 对象工厂 -->
<plugins /><!-- 插件 -->
<environments><!-- 配置环境 -->
<environment><!-- 环境变量 -->
<transactionManager /><!-- 事务管理器 -->
<dataSource /><!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider /><!-- 数据库厂商标识 -->
<mappers /><!-- 映射器 -->
</configuration>

SQL映射文件mapper.xml需要放入mybatis-config.xml中的<mapper />里面,如果有多个mapper.xml就全部放入。如果一个接口对应多个映射文件,则需要有各自的命名空间namespace.

读入核心配置文件

SqlSessionFactoryBuilder 读入核心配置文件mybatis-config.xml,再通过build函数创建SqlSessionFactory(相当于线程池),SqlSessionFactory创建SqlSession实例(此步相当于线程池创建线程),因为mybatis-config.xml中包括mapper.xml,所以现在可以拿到对数据库的操作指令。

SQL映射文件:mapper.xml

mapper.xml文件通过命令<mapper namespace="类的路径">,读入要实现的接口(接口已经import POJO 类,且接口名一般为:POJO类名+Mapper,例如UserMapper,与之对应的SQL映射文件名称为:UserMapper.xml),接口中对应方法定义(比如说对数据库进行的操作),mapper.xml通过一些特定的命令(select、delete等),这就与接口对应起来,其实可以将mapper.xml看作一个特别的类,并且此类 implement 该接口。

测试:

由上面可以得知,通过SqlSessionFactoryBuilder 一系列的操作,我们将mybatis-config.xml,mapper.xml,接口、POJO类都链接起来了。

之后我们要进行操作的时候,也就是在测试类中,通过反射拿到接口的类,UserMapper.class,然后对该类中的函数进行调用,就是直接转到SQL映射文件UserMapper.xml寻找对应操作。

将SqlSession实例commit()并close()

注解

使用注解的方式实现mapper.xml尽管可以减少一些操作,但是并不建议,因为有动态SQL以及复杂的表的使用,不利于维护。

xml文件会覆盖掉共存的注解