作者:禅与计算机程序设计艺术
1.简介
Spring Boot是当下最流行的Java Web开发框架之一,而 MyBatis 是最知名的 ORM 框架。在实际的项目开发中,我们经常会遇到要整合 MyBatis 和 Spring Boot 的情况,这时,就需要对 MyBatis 的相关配置进行正确的操作了。 本文将详细介绍 Spring Boot 如何集成 MyBatis ,并提供配置方法。
2.前提条件
阅读本文前,请确保以下条件已经具备:
- 有一定 Spring Boot 使用经验;
- 有 MyBatis 的使用经验;
- 对 MyBatis 的基本配置、配置文件、映射文件等有一定了解;
3.Spring Boot集成MyBatis概述
Spring Boot是一个用来快速搭建各种各样微服务应用的脚手架,它可以帮助开发者快速地创建基于Spring Framework的应用程序。由于其自带的自动化配置功能,使得集成MyBatis变得异常简单。只需添加 MyBatis starter依赖包,然后在 application.properties 配置文件中进行必要的 MyBatis 配置即可。 Spring Boot 与 MyBatis 的集成主要包括以下几个方面:
(1)Maven坐标引入
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<!-- mybatis 版本 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
其中 ${mybatis-spring-boot-starter.version}
表示 MyBatis Spring Boot Starter 版本号,${mybatis.version}
表示 MyBatis 版本号。
注意:如果您的 MyBatis 版本比较低(比如3.x),则不建议采用上面的 starter,而是直接依赖 MyBatis 本身,这主要依赖于 MyBatis 配置文件的位置以及路径。
(2)application.properties 文件配置
如之前所说,Spring Boot 会自动识别 MyBatis 的配置项并加载它们。但是,我们还需要设置一些 MyBatis 相关的属性来告诉 MyBatis 从哪里加载配置以及什么样的数据库适用。 例如:
#mybatis相关配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=<PASSWORD>
#mybatis扫描路径
mybatis.type-aliases-package=com.example.demo.entity
#mybatismapper扫描路径
mybatis.mapper-locations=classpath:/mybatis/**/*Mapper.xml
这些配置项主要用于指定 MyBatis 在初始化时应该连接哪个数据库,并且通过 mybatis.
开头的属性指定 MyBatis 配置信息。 其中:
spring.datasource
指定了 MyBatis 连接数据库的配置;mybatis.type-aliases-package
设置 MyBatis 别名扫描路径;mybatis.mapper-locations
设置 MyBatis Mapper XML 文件扫描路径。
当然,除了这些配置项,我们也可以在 @MapperScan
注解中指定 MyBatis 扫描路径,如下所示:
@SpringBootApplication
@MapperScan("com.example.demo.dao") //指定mybatis mapper扫描路径
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
(3)配置 MyBatis 数据源
在 Mybatis 的 xml 中,<mapper>
的 namespace 属性值是 http://mybatis.org/spring/schema/mybatis-spring
。通过这种方式,Mybatis 可以根据 namespace 来定位 MyBatis 配置文件。因此,我们需要创建一个 MyBatis 配置文件来描述 MyBatis 应该如何从数据源中获取数据,这个 MyBatis 配置文件通常被命名为 MyBatisConfig.java。这里我们假设 MyBatisConfig.java 的代码如下:
@Configuration
@MapperScans({ @MapperScan("com.example.demo.dao"),
@MapperScan("com.example.demo.otherdao") }) //支持多模块扫描
public class MyBatisConfig extends org.apache.ibatis.session.Configuration {
@Autowired
private DataSource dataSource;
/**
* 初始化mybatis
*/
@PostConstruct
public void init() throws Exception{
this.setEnvironment(new Environment("development", new JdbcTransactionFactory(), dataSource));
this.setTypeAliasesPackage("com.example.demo.entity");
this.addMappers("com.example.demo.dao","com.example.demo.otherdao"); //多模块扫描
this.setLazyLoadingEnabled(false);
this.setUseGeneratedKeys(false);
}
}
该类继承自 org.apache.ibatis.session.Configuration
,同时又实现了 Spring Bean 接口,通过 @Autowired
注入了 Spring 的 DataSource 对象,并重载了父类的一些方法来完成 MyBatis 的初始化工作。
(4)创建 MyBatis Mapper 接口及 XML 文件
最后一步,我们需要创建一个 MyBatis Mapper 接口和一个对应的 MyBatis XML 文件。如下所示:
// 实体类
@Data
public class Person {
private Integer id;
private String name;
private Integer age;
}
// Mapper 接口
public interface PersonDao {
List<Person> selectAll();
}
<!-- Mapper 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.example.demo.dao.PersonDao">
<select id="selectAll" resultType="com.example.demo.entity.Person">
SELECT * FROM person
</select>
</mapper>
在上面例子中,我们定义了一个 Person 实体类,一个 PersonDao 接口,以及一个对应的 PersonDao.xml 文件。