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 的整合。