Spring Boot整合MyBatis过程详解(附带实例))
MyBatis 官方对 Spring Boot 提供了完善的支持,能够方便地将 MyBatis 集成到 Spring Boot 项目中。
接下来就让我们一步一步地将 MyBatis 集成到 Spring Boot 项目中,实现学生信息管理功能。
MyBatis-Spring-Boot-Starter 不是 Spring Boot 官方开发的启动器,它是一个集成包,对 MyBatis、MyBatis-Spring 和 Spring Boot 都存在依赖,需要注意三者的版本对应关系,如下表所示。
由于 MyBatis-Spring-Boot-Starter 是 MyBatis 官方提供的组件而非 Spring Boot 开发的,因此它的版本和 Spring Boot 不一样,使用时需要注意版本。
MyBatis 针对 Spring Boot 项目做了非常完善的支持,使用 MyBatis-Spring-Boot-Starter 组件可以做到以下几点:
MyBatis 的启动过程看起来很复杂,其实主要完成以下几个操作:
因此,使用 MyBatis-Spring-Boot-Starter启动器之后,只需要在配置文件中定义数据源,MyBatis 就会使用该数据源自动创建 SqlSessionFactoryBean 以及 SqlSessionTemplate,同时会自动扫描 Mappers 接口,并注册到 Spring 上下文中,相当于所有数据库的底层操作 MyBatis 都自动完成了。
MyBatis 对于 SQL 映射提供了两种解决方案,一种是简化后的 XML 配置版,另一种是使用注解解决一切问题。
下面将演示 Spring Boot 项目集成 MyBatis-spring-boot-starter 组件的过程,以便进一步构建数据库应用。
其实,也可以直接在 Mapper 类上添加注解 @Mapper,这样 Spring Boot 也会自动注入 Spring。不过,建议使用上面代码中使用的这种,不然给每个 Mapper 添加注解也挺麻烦。
接下来定义 MyBatis 的核心文件:mapper 映射文件。在 resources/mapper 目录创建 StudentMapper.xml 映射文件,具体实例代码如下:
单击 Run Test 或在方法上右击,选择 Run 'testSelectAll',运行测试方法,结果如下图所示。

图 1 单元测试的运行结果
结果表明单元测试方法 testSelectAll() 运行成功,并输出了相应的学生数据查询结果。这说明在项目中成功集成 MyBatis,并成功执行了数据查询操作。
接下来就让我们一步一步地将 MyBatis 集成到 Spring Boot 项目中,实现学生信息管理功能。
MyBatis-Spring-Boot-Starter简介
MyBatis 官方为帮助开发者快速集成 Spring Boot 项目、构建基于 Spring Boot 的 MyBatis 应用程序,提供了针对 Spring Boot 的启动器:MyBatis-Spring-Boot-Starter。MyBatis-Spring-Boot-Starter 不是 Spring Boot 官方开发的启动器,它是一个集成包,对 MyBatis、MyBatis-Spring 和 Spring Boot 都存在依赖,需要注意三者的版本对应关系,如下表所示。
| MyBatis-Spring-Boot-Starter | MyBatis-Spring | Spring Boot | Java |
|---|---|---|---|
| 2.1 | 2.0(需要 2.0.2,并支持所有功能) | 2.1 或更高 | 8 或更高 |
| 1.3 | 1.3 | 1.5 | 6 或更高 |
由于 MyBatis-Spring-Boot-Starter 是 MyBatis 官方提供的组件而非 Spring Boot 开发的,因此它的版本和 Spring Boot 不一样,使用时需要注意版本。
MyBatis 针对 Spring Boot 项目做了非常完善的支持,使用 MyBatis-Spring-Boot-Starter 组件可以做到以下几点:
- 构建独立的应用;
- 几乎可以零配置;
- 需要很少的 XML 配置。
MyBatis 的启动过程看起来很复杂,其实主要完成以下几个操作:
- 自动发现存在的数据源;
- 利用 SqlSessionFactoryBean 创建并注册 SqlSessionFactory;
- 创建并注册 SqlSessionTemplate;
- 自动扫描 Mappers,并注册到 Spring 上下文中,方便程序的注入使用。
因此,使用 MyBatis-Spring-Boot-Starter启动器之后,只需要在配置文件中定义数据源,MyBatis 就会使用该数据源自动创建 SqlSessionFactoryBean 以及 SqlSessionTemplate,同时会自动扫描 Mappers 接口,并注册到 Spring 上下文中,相当于所有数据库的底层操作 MyBatis 都自动完成了。
MyBatis 对于 SQL 映射提供了两种解决方案,一种是简化后的 XML 配置版,另一种是使用注解解决一切问题。
Spring Boot集成MyBatis
MyBatis 官方针对 Spring Boot 提供了启动包:MyBatis-spring-boot-starter组件,使得 Spring Boot 构建 MyBatis 应用程序更加简单方便。下面将演示 Spring Boot 项目集成 MyBatis-spring-boot-starter 组件的过程,以便进一步构建数据库应用。
1) 添加依赖
首先需要在 pom.xml 文件中引入 MyBatis-spring-boot-starter 依赖包:
<<dependency>
<groupId>org.MyBatis.spring.boot</groupId>
<artifactId>MyBatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>>
在上面的示例中,引入 MyBatis-spring-boot-starter 组件需要指定版本号。另外,还需要引入 mysql-connector-java 连接驱动。2) 应用配置
在 application.properties 中添加 MyBatis 的相关配置:# mapper.xml配置文件的路径 MyBatis.mapper-locations=classpath:/mapper/*.xml MyBatis.type-aliases-package=com.weiz.example01.model # 数据库连接 spring.datasource.url=jdbc:mysql://localhost:3306/MyBatis_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver在上面的配置中,主要是数据库连接和 Mapper 文件相关的配置,具体配置说明如下:
- MyBatis.mapper-locations:配置 Mapper 对应的 XML 文件路径;
- MyBatis.type-aliases-package:配置项目中的实体类包路径;
- spring.datasource.*:数据源相关配置。
3) 修改启动类
在启动类中添加对 Mapper 包的扫描注解 @MapperScan,Spring Boot 启动时会自动加载包路径下的 Mapper。
@Spring BootApplication
@MapperScan("com.weiz.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在上面的示例中,使用 MapperScan 注解定义需要扫描的 Mapper 包。其实,也可以直接在 Mapper 类上添加注解 @Mapper,这样 Spring Boot 也会自动注入 Spring。不过,建议使用上面代码中使用的这种,不然给每个 Mapper 添加注解也挺麻烦。
4) 创建数据库和表
首先创建 mybatis_test 数据库,然后在数据库中创建 student 表,脚本如下:
DROP TABLE IF EXISTS 'student';
CREATE TABLE 'student' (
'id' bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
'name' varchar(32) DEFAULT NULL COMMENT '姓名',
'sex' int(11) DEFAULT NULL,
'age' int(11) DEFAULT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
5) 创建实体类
在 model 目录创建 Student 实体类,属性与创建的 Student 表中的字段一致,示例代码如下:
public class Student {
private Long id;
private String name;
private int sex;
private int age;
public Student(){
}
public Student(String name, int sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//省略get、set方法
};
6) 添加mapper接口和映射文件
创建数据库表之后,接下来定义 mapper 接口。首先在 com.weiz.example01.mapper 包中创建 StudentMapper 接口,然后定义一个查询方法,具体代码如下:
public interface StudentMapper {
List<Student> selectAll();
}
在上面的示例中,定义了查询学生信息的 seletAll() 方法。需要注意的是,mapper 接口中的方法名需要和 XML 配置中的 id 属性一致,不然找不到方法去对应执行的 SQL。接下来定义 MyBatis 的核心文件:mapper 映射文件。在 resources/mapper 目录创建 StudentMapper.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="com.weiz.example01.mapper.StudentMapper" >
<select id="selectAll" resultMap="BaseResultMap" >
SELECT
*
FROM student
</select>
<resultMap id="BaseResultMap" type="com.weiz.example01.model.Student" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="sex" property="sex" javaType="INTEGER"/>
<result column="age" property="age" jdbcType="INTEGER" />
</resultMap>
</mapper>>
在上面的示例中,通过 <select> 标签映射 mapper 接口中定义的 selectAll() 方法,标签的 id 为 mapper 接口中的方法,然后通过 <resultMap> 映射查询结果集字段与实体类 Student 的映射关系。7) 测试调用
创建单元测试类和测试方法 testSelectAll(),具体测试代码如下:
@Autowired
private StudentMapper studentMapper;
@Test
public void testSelectAll() {
// 查询
List<Student> students = studentMapper.selectAll();
for (Student stu : students){
System.out.println("name:"+stu.getName()+",age:"+stu.getAge());
}
}
上面是简单的使用 MyBatis 的测试示例,使用 @Autowired 将 StudentMapper 注入后即可直接调用。单击 Run Test 或在方法上右击,选择 Run 'testSelectAll',运行测试方法,结果如下图所示。

图 1 单元测试的运行结果
结果表明单元测试方法 testSelectAll() 运行成功,并输出了相应的学生数据查询结果。这说明在项目中成功集成 MyBatis,并成功执行了数据查询操作。
ICP备案:
公安联网备案: