前言:在项目启动的时候,Spring Boot Starter 会根据约定信息对组件进行加载、初始化。因此项目中引入了对于的 Starter 之后,就可以到达开箱即用的效果。所以 mybatis-spring-boot-starter 可以帮助你快速构建一个基于 Spring Boot 的 MyBatis 应用程序。
⭐接下来带你快速上手在 Spring Boot 项目中集成 MyBatis!
将以下依赖导入到 pom.xml 文件中:
<!-- MyBatis Integration With Spring Boot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- @Data、@ToString -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- 提供 mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- log4j 打印 SQL 执行日志、.yml 中配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
注意:该依赖是由 MyBatis 官方整合 Spring Boot 并提供的,而非 Spring Boot 官方整合 MyBatis,所以
<version>版本号不能省去!
众所周知,MyBatis 有两大核心组件:SqlSessionFactory 和 Mapper 接口。前者用于数据库连接,后者用于 SQL 映射。当我们基于 Spring 使用 MyBatis 时,也同样要保证在 Spring 环境中能存在着这两大组件。
而引入 mybatis-spring-boot-starter 依赖后,它会自动完成如下任务:
- 自动检测已存在的
DataSource - 利用
SqlSessionFactoryBean创建并注册SqlSessionFactory - 创建并注册
SqlSessionTemplate实例 - 自动扫描
Mappers接口,并将其注册到 Spring 上下文环境中方便注入使用
假设 mysql 数据库中有如下 sys_user 表:
| Field | Type | Comment |
|---|---|---|
| id🔑 | bigint(20) NOT NULL | 用户 ID |
| username | varchar(50) NULL | 用户名 |
| varchar(50) NULL | 邮箱 | |
| password | varchar(80) NULL | 密码 |
| phoneNum | varchar(20) NULL | 电话号码 |
创建 User 实体类
注:此处实体类名
User与数据库中的sys_user表名不匹配从而导致无法自动映射,需要在编写 UserMapper.xml 时通过resultType属性进行手动映射;phone与phoneNum则是通过Select语句中的AS命别名进行映射。
@Data
@ToString
public class User {
private int id;
private String username;
private String email;
private String password;
private String phone;
}
Mapper 接口:
@Mapper
public interface UserMapper {
List<User> selectAllUsers();
}
🧠如果拥有多个 @Mapper 后,逐一进行注解有点麻烦,这时可以使用 @MapperScan(basePackages = "com.wyk.mybatis.dao") 进行替代(@Mapper 就可以不使用了)
@Configuration
@MapperScan(basePackages = "com.wyk.mybatis.dao")
public class MyBatisConfiguration {
}
至于 SQL 语句,我们可以采用注解或 XML 配置文件的方式进行编写,这里使用 XML 配置文件进行演示:
前置:在
resource目录下新建com/wyk/mybatis/mapper/UserMapper.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.wyk.mybatis.dao.UserMapper">
<select id="selectAllUsers" resultType="user">
-- phoneNum As phone: 字段名不一致的映射处理
select id, username, email, password, phoneNum AS phone
-- 表名不一致的映射处理
from sys_user;
</select>
</mapper>
SQL 映射都基本配置好了,但数据库还没连接,于是在 application.yml 中进行相关配置。
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
mybatis:
# 实体类别名---包路径
type-aliases-package: com.wyk.mybatis.entity
# 映射文件位置
mapper-locations: classpath*:com/wyk/mybatis/mapper/*Mapper.xml
configuration:
# 使用日志打印 SQL 语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
OK!接下来在测试类中进行测试:
@SpringBootTest
class MybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
List<User> users = userMapper.selectAllUsers();
users.forEach(System.out::println);
}
}
运行结果:
🤨Spring Boot 集成 MyBatis 的基本操作就演示到这,更多操作与配置请查阅官方文档