Spring Boot整合MyBatis

前言

新公司的新项目使用的是mybatis,以前的项目使用的是Hibernate,所以在网上找了一些关于Spring Boot和MyBatis组合的相关资料,总结后分享出来。

ORM框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句SQL的Hibernate,一个是可以灵活调试动态sql的MyBatis。两者各有特点,在企业级系统开发中可以根据需求灵活使用。

整合MyBatis

添加依赖

新建一个项目,在pom.xml中引入依赖

1
2
3
4
5
6
7
8
9
10
<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>
</dependency>

然后修改application.properties中配置mysql的连接配置

1
2
3
4
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

同其他Spring Boot工程一样,简单且简洁的的完成了基本配置,下面看看如何在这个基础下轻松方便的使用MyBatis访问数据库。

传统MyBatis使用方法

SQL

在Mysql中创建user表,包含id(bigint)、name(varchar)、age(int)字段。

1
2
3
4
5
6
CREATE TABLE `user` (
`id` bigint(8) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Entity

然后我们再创建映射对象User。

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
@Table(name = "user")
public class User {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

Dao

这里的ProductDao 是传统的mybatis的用法。

1
2
3
4
@Mapper 
public interface UserDao {
List<User> getUsers();
}

mapper

传统mybatis 我们必须有个xml 文件和Dao 对应起来, tk.maybatis.mapper无需此文件。

1
2
3
4
5
<mapper namespace="com.github.wz2cool.demo.tk.mybatis.mapper.ProductDao">
<select id="getProducts" resultType="com.github.wz2cool.demo.tk.mybatis.model.entity.table.Product">
SELECT * FROM product
</select>
</mapper>

设置扫描包

1
2
3
4
5
6
7
8
@SpringBootApplication 
@MapperScan(basePackages = "mapper")
public class SpringBootMybatisApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisApplication.class, args);
}
}

application.properies

注意这里的配置只是针对我们传统mybatis配置,对于tk.maybatis.mapper可以省略这里的配置。

1
2
mybatis.type-aliases-package=mapper
mybatis.mapper-locations=classpath:mapper/*.xml

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringRunner.class)
@SpringBootTest public class SpringBootMybatisApplicationTests {

@Autowired
private UserDao userDao;

@Test
public void testSelect() throws Exception {
List<User> userList = userDao.getUsers();
assertEquals(true, userList.size() > 0);
}

}

通过~这就是传统的mybatis的使用方法。那有没有更方便的呢?接下来我们了解下tk.mybatis.mapper。

tk.mybatis.mapper 用法

添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>

<!--tk Mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.0</version>
</dependency>

继承通用mapper

是的!你没有看错,没有xml文件!

1
2
public interface TkUserDao extends Mapper<User> {
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(SpringRunner.class)
@SpringBootTest public class TkMyBatisApplicationTests {

@Autowired
private TkUserDao tkUserDao;

@Test
public void selectAllTest() {
List<User> userList = tkUserDao.selectAll();
assertEquals(true, userList.size() > 0);
}

@Test
public void insertTest() {
User user = new User();
user.setAge(25);
user.setName("小李");
tkUserDao.insert(user);
}

}

测试通过~通用mapper的基本用法就讲完了。

如果大家想深入研究通用mapper,可以去访问GitHub仓库 abel533/Mapper

希望本篇文章对您所有帮助~