SpringBoot和Mybatis的整合

Posted 旧巷里的旧少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot和Mybatis的整合相关的知识,希望对你有一定的参考价值。

这里介绍两种整合SpringBoot和Mybatis的模式,分别是“全注解版” 和 “注解xml合并版”。

前期准备
开发环境

开发工具:IDEA
JDK:1.8
技术:SpringBoot、Maven、Mybatis
创建项目





项目结构

 

Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.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>1.3.1</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
全注解版
SpringBoot配置文件

这里使用yml格式的配置文件,将application.properties改名为application.yml。

#配置数据源
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dianping?useUnicode=true&characterEncoding=utf8
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
1
2
3
4
5
6
7
SpringBoot会自动加载application.yml相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中。

实体类

public class Happiness {
private Long id;
private String city;
private Integer num;

//getters、setters、toString
}
1
2
3
4
5
6
7
映射类

@Mapper
public interface HappinessDao {
@Select("SELECT * FROM happiness WHERE city = #{city}")
Happiness findHappinessByCity(@Param("city") String city);

@Insert("INSERT INTO happiness(city, num) VALUES(#{city}, #{num})")
int insertHappiness(@Param("city") String city, @Param("num") Integer num);
}
1
2
3
4
5
6
7
8
Service类

事务管理只需要在方法上加个注解:@Transactional

@Service
public class HappinessService {
@Autowired
private HappinessDao happinessDao;

public Happiness selectService(String city){
return happinessDao.findHappinessByCity(city);
}

@Transactional
public void insertService(){
happinessDao.insertHappiness("西安", 9421);
int a = 1 / 0; //模拟故障
happinessDao.insertHappiness("长安", 1294);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Controller类

@RestController
@RequestMapping("/demo")
public class HappinessController {
@Autowired
private HappinessService happinessService;

@RequestMapping("/query")
public Happiness testQuery(){
return happinessService.selectService("北京");
}

@RequestMapping("/insert")
public Happiness testInsert(){
happinessService.insertService();
return happinessService.selectService("西安");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
测试

http://localhost:8080/demo/query
http://localhost:8080/demo/insert
1
2
注解xml合并版
项目结构

 

SpringBoot配置文件

#配置数据源
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/dianping
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver

#指定mybatis映射文件的地址
mybatis:
mapper-locations: classpath:mapper/*.xml
1
2
3
4
5
6
7
8
9
10
11
映射类

@Mapper
public interface HappinessDao {
Happiness findHappinessByCity(String city);
int insertHappiness(HashMap<String, Object> map);
}
1
2
3
4
5
映射文件

<mapper namespace="com.example.demo.dao.HappinessDao">
<select id="findHappinessByCity" parameterType="String" resultType="com.example.demo.domain.Happiness">
SELECT * FROM happiness WHERE city = #{city}
</select>

<insert id="insertHappiness" parameterType="HashMap" useGeneratedKeys="true" keyProperty="id">
INSERT INTO happiness(city, num) VALUES(#{city}, #{num})
</insert>
</mapper>
1
2
3
4
5
6
7
8
9
Service类

事务管理只需要在方法上加个注解:@Transactional

@Service
public class HappinessService {
@Autowired
private HappinessDao happinessDao;

public Happiness selectService(String city){
return happinessDao.findHappinessByCity(city);
}

@Transactional
public void insertService(){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("city", "西安");
map.put("num", 9421);

happinessDao.insertHappiness(map);
int a = 1 / 0; //模拟故障
happinessDao.insertHappiness(map);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Controller类

@RestController
@RequestMapping("/demo")
public class HappinessController {
@Autowired
private HappinessService happinessService;

@RequestMapping("/query")
public Happiness testQuery(){
return happinessService.selectService("北京");
}

@RequestMapping("/insert")
public Happiness testInsert(){
happinessService.insertService();
return happinessService.selectService("西安");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
测试

http://localhost:8080/demo/query
http://localhost:8080/demo/insert








































































































































































































































































































































以上是关于SpringBoot和Mybatis的整合的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 整合其他框架 -- SpringBoot整合Mybatis

精通系列)中

精通系列)上

SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis

spring整合mybatis

SpringBoot和Mybatis的整合