MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。非常灵活,可定制化程度高!
简单介绍
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
准备工作
MySQL创建一个biubiu的数据库 创建一张表 tb_user,插入一些测试数据
1 | SET NAMES utf8mb4; |
创建项目
创建一个springboot-mybatis-demo的web项目,如图
开始集成
引入相关依赖
mybatis-spring-boot-starter
mysql-connector-java
最终的pom.xml文件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
59
60
61
62
<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">
<parent>
<artifactId>springboot-demo</artifactId>
<groupId>com.biubiu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springboot-mybatis-demo</artifactId>
<properties>
<java.version>1.8</java.version>
<mybatis.version>2.2.0</mybatis.version>
<fastjson.version>1.2.76</fastjson.version>
</properties>
<dependencies>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis框架-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok工具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--fastjson工具-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>实体类
在写之前推荐一个工具,这里有个 代码生成器网站 推荐使用!
UserEntity 对应数据库的表 biubiu.tb_user
1 | /** |
- 数据交互层接口 UserMapper(增删改查)
1 | /** |
- 接口对应的UserMapper.xml文件
MyBatis提供两种写sql的方式,注解和xml,我个人觉得xml比较好,把代码和sql分开,便于维护。有时候sql写的复杂了注解方式有局限性,我习惯上使用xml方式。IDEA有个插件叫MyBatisX,可以从mapper到xml直接跳转,奥里给→_→
1 |
|
- service层,包括接口和实现类
UserService接口
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/**
* <p>
* UserService
* </p>
*
* @author biubiu
* @since 2021/8/11
*/
public interface UserService {
/**
* 新增
*/
public boolean insert(UserEntity user);
/**
* 删除
*/
public boolean delete(int id);
/**
* 更新
*/
public boolean update(UserEntity user);
/**
* 根据主键 id 查询
*/
public UserEntity load(int id);
/**
* 分页查询
*/
public Map<String, Object> pageList(int pageNum, int pageSize);
}UserServiceImpl实现类
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/**
* <p>
* UserServiceImpl
* </p>
*
* @author biubiu
* @since 2021/8/11
*/
public class UserServiceImpl implements UserService {
private UserMapper userMapper;
public boolean insert(UserEntity user) {
// valid
if (user == null) {
throw new RuntimeException("必要参数缺失");
}
int insert = userMapper.insert(user);
return insert > 0;
}
public boolean delete(int id) {
int ret = userMapper.delete(id);
return ret > 0;
}
public boolean update(UserEntity user) {
int ret = userMapper.update(user);
return ret > 0;
}
public UserEntity load(int id) {
return userMapper.load(id);
}
public Map<String, Object> pageList(int pageNum, int pageSize) {
List<UserEntity> pageList = userMapper.pageList(pageNum, pageSize);
int totalCount = userMapper.pageListCount(pageNum, pageSize);
// result
Map<String, Object> result = new HashMap<String, Object>();
result.put("pageList", pageList);
result.put("totalCount", totalCount);
return result;
}
}
- UserController
1 | /** |
配置数据库连接信息
上面写了一系列代码,唉,差点累死了,接下来轻松多了!
我们写了一些列类,下面开始连接数据库,以及MyBatis的xml文件位置。注意修改数据库连接字符串以及用户名密码!
application.properties
1 | jdbc:mysql://127.0.0.1:3306/biubiu?useUnicode=true&characterEncoding=UTF-8&useSSL=true = |
最后一步,在配置下mapper接口扫描,在启动类上加上一个注解@MapperScan("com.biubiu.mb.mapper")
1 | /** |
开始测试
费了九牛二虎之力,终于到了验收成果的时候,有些小激动,废话不多说,开始干!
打开postman神器,开始一个一个测试我们的增删改查
- 插入一个人
好家伙看起来成功了,我们查一下数据库,果真成功了
成功了,那我再用接口查一把
- 修改下这个人
数据库看眼,是否成功
- 删除把
问题排除
由于我写的时候太粗心把好几个单词打错了,导致了几个Bug…要细心细心细心呀!!!
错误1
pagenum小写了,和接口参数里对不上也会报错错误2
自动生成Id我全都写成了id,这里应该是UserEntity里的UserId和数据库字段user_id错误3
也是和UserEntity里的UserId不对应造成的