Spring Boot 整合 MyBatis

前言

现在业界比较流行的数据操作层框架 MyBatis,下面就讲解下 Springboot 如何整合 MyBatis,这里使用的是 xml 配置 SQL 而不是用注解。主要是 SQL 和业务代码应该隔离,方便和 DBA 校对 SQL。

我的 Git

https://github.com/JasperZXY/TestSpringCloud/tree/master/boot-feature

由于我很多功能放在同一个项目里面,所以代码看起来没有那么清晰,不过将就看还是可以的。

我的项目结构

src/
 +- main/
     +- java/
        +- zxy.demo.springboot.mybatis
			 +- entity
		     +- dao
		     +- web
		     |- MainApplicion.java
     +- resources/
			 +- mapper
			 |- application.properties

数据库准备

数据库用的是 MySQL

CREATE DATABASE test_spring_boot;
CREATE TABLE `user` (
  `id` int(11) NOT NULL COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '姓名',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mybatis-generator

如果没有 mybatis-generator,可以下载一个。
mybatis-generator 的下载地址

使用 mybatis-generator 工具生成相关文件,实体对象、dao 接口、xml 文件。

pom.xml

添加必要的依赖

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<java.version>1.8</java.version>
	<mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version>
	<mysql-connector.version>5.1.39</mysql-connector.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
</dependencies>

application.properties

打开 application.properties 文件, 修改相应的数据源配置,比如数据源地址、账号、密码等,如下

spring.datasource.url=jdbc:mysql://localhost:3306/test_spring_boot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=zxy.demo.springboot.boot_feature.entity
mybatis.mapperLocations=classpath:mapper/*.xml

注意根据自己的实现项目目录进行相应的修改。

  • mybatis.typeAliasesPackage:为实体对象所在的包,跟数据库表一一对应
  • mybatis.mapperLocations:mapper 文件的位置

dao

需要配置 dao 文件,也即操作数据表的接口。

通过 @MapperScan 注解进行 dao 文件的扫描,如下

// MyBatis 支持
@MapperScan("zxy.demo.springboot.mybatis.dao")
@SpringBootApplication
public class MainApplicion {
<span class="hljs-selector-tag">public</span> <span class="hljs-selector-tag">static</span> <span class="hljs-selector-tag">void</span> <span class="hljs-selector-tag">main</span>(String[] args) <span class="hljs-selector-tag">throws</span> <span class="hljs-selector-tag">Exception</span> {
	<span class="hljs-selector-tag">SpringApplication</span><span class="hljs-selector-class">.run</span>(MainApplicion.class, args);
}

}

controller

@RequestMapping("user")
@RestController
public class UserController {
	@Autowired
	private UserMapper userMapper;
<span class="hljs-variable">@GetMapping</span>(<span class="hljs-string">"/list/all"</span>)
public Object listAll() {
	<span class="hljs-selector-tag">return</span> <span class="hljs-selector-tag">userMapper</span><span class="hljs-selector-class">.selectByExample</span>(new UserExample());
}

}

运行

右键运行 Application 应用启动类的 main 函数,然后在浏览器访问即可看到数据。

http://localhost:8080/user/list/all
[
	{
		id: 1,
		name: "张三",
		birthday: 1491667200000,
		address: "深圳"
	}
]

与 SpringMVC 整合 MyBatis 的区别

SpringMVC 是通过 xml 进行配置,通过配置 DataSource、SqlSessionFactoryBean、MapperScannerConfigurer 来完成 MyBatis 的整合。
而 SpringBoot 是通过 application.properties 配置数据源、实体 bean 包名、mapper 文件位置和@MapperScan注解来配置扫描的 dao 路径,从而实现 MyBatis 的整合。