# MyBatis-Plus教程 - 2 HelloWorld
MyBatis-Plus 官网推荐在 SpringBoot 中使用的,这里就从 SpringBoot 中集成 MyBatis-Plus 开始。
# 2.1 准备工作
# 1 准备数据库和表数据
# 建库
CREATE DATABASE IF NOT EXISTS foooor_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
USE foooor_db;
# 建表
CREATE TABLE `tb_user` (
`id` BIGINT(20) NOT NULL,
`username` VARCHAR(32) NULL,
`password` VARCHAR(32) NULL,
`email` VARCHAR(64) NULL,
`age` INT NULL,
`create_time` DATETIME NULL,
`update_time` DATETIME NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4;
# 准备数据:
INSERT INTO `tb_user`
(`id`, `username`, `password`, `email`, `age`, `create_time`, `update_time`)
VALUES
(1, 'doubi', '123456', 'doubi@foooor.com', 30, NOW(), NOW()),
(2, 'niubi', '1234qwer', 'niubi@foooor.com', 28, NOW(), NOW()),
(3, 'erbi', '88888888', 'erbi@foooor.com', 35, NOW(), NOW());
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 2 创建项目
使用 IDEA 的 Spring Initializr 可以快速创建Spring Boot项目。
File --> New --> Project --> 选择Spring Initializr。
然后填写项目信息,然后点击 next
:
选择项目依赖,勾选如下依赖:
- Spring Boot DevTools :用于配置热部署,用法见 9 热部署 (opens new window) 。
- Lombok :用于生成实体类的 getter 和 setter,用法见 3 Lombok和Hutool (opens new window) 。
- Spring Configuration Processor :用于配置文件的提示。
- Spring Web :因为是 web 项目,所以勾选 Spring Web,会自动导入 SpringMVC 相关的依赖。
创建完成,项目结构如下:
资源目录下的 static
用来放置页面静态资源,templates
用来放置模板引擎的模板页面,因为现在项目开发主要使用前后端分离,前端使用 Vue 开发,所以这两个目录基本不用了,删掉了。
使用 Spring Initializr
创建,会自动创建主启动类。
# 3 pom文件
创建完成,pom.xml 文件如下:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.foooor</groupId>
<artifactId>hello-mybatisplus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello-mybatisplus</name>
<description>hello-mybatisplus</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- devtools依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- configuration-processor依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 4 配置字符编码
防止文件出现乱码,需要设置一下项目文件的字符编码。
# 5 Lombok配置
Lombok 是一个 Java 库,在编译代码的时候,它通过注解自动生成常见的代码结构,如构造器、getter、setter、equals、hashCode、toString 等。
使用方法可以参考 SpringBoot教程 (opens new window) 中的 3 Lombok和Hutool (opens new window) 。
如果你的 IDEA 版本在2020.3以上,不需要安装Lombok插件。如果IDEA 版本在2020.3以下,需要安装Lombok插件。
点击 Flie --> Setting --> Plugins --> 搜索Lombok --> 安装。
# 2.2 集成MyBatis-Plus
下面开始在 SpringBoot 中集成 MyBatis-Plus。
# 1 添加依赖
在项目的 pom.xml 中添加数据库和 mybatis-plus 的依赖。
<!-- mysql驱动依赖!!! -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
</dependency>
<!-- mybatis-plus依赖!!! -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
2
3
4
5
6
7
8
9
10
11
12
13
mybatis-plus 的依赖包含了 mybatis 的依赖。
# 2 编写配置文件
在 application.yaml 中添加数据源配置和mybatis-plus的配置,如下:
# 数据源配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/foooor_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT
username: root
password: 123456
hikari:
minimum-idle: 5 # 最小空闲连接数
maximum-pool-size: 10 # 最大活跃连接数
idle-timeout: 30000 # 空闲连接生命周期,以毫秒为单位
pool-name: HikariCP # 连接池名称,主要用于记录日志和JMX管理,默认为生成的
max-lifetime: 1800000 # 连接在连接池中允许存在的最长时间,默认为30分钟,以毫秒为单位
connection-timeout: 30000 # 连接超时时间,以毫秒为单位
# mybaits-plus配置
mybatis-plus:
# MyBatis Mapper所对应的XML文件位置
mapper-locations: classpath*:/mapper/*Mapper.xml
global-config:
# 关闭MP3.0自带的banner
banner: false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- 在 Spring Boot 中默认的连接池是 HikariCP 连接池,这里进行了连接池的配置。
- 这里指定了 MyBatis 的 Mapper xml 文件的目录,这里可以放在
src/main/resource
的mapper
目录下即可。
下面开始编写pojo、mapper、service、controller。
# 3 编写pojo
编写与数据库映射的实体类。
User.java
package com.foooor.helloplus.pojo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("tb_user")
public class User {
private Long id;
private String username;
private Integer age;
private Date createTime;
private Date updateTime;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
因为数据库中的表名和 Java 中的实体类名不对应,所以使用 @TableName
注解指定表名,
@Data
是 lombok 的注解,用于生成 getter
和 setter
。
# 4 编写Mapper
编写 Mapper 接口,继承 BaseMapper
接口,并添加 @Mapper
注解。
UserMapper.java:
package com.foooor.helloplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.foooor.helloplus.pojo.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
2
3
4
5
6
7
8
9
10
BaseMapper
接口中提供了很多增删改查的方法,所以不用像 MyBatis
一样添加接口方法,当然后面如果 BaseMapper 中提供的方法不能满足你,那么你也可以在这里自己定义方法,就像 MyBatis
中的一样,没有任何区别。因为这里没有创建接口方法,所以也不需要 XxxMapper.xml
文件。如果后面有需要再创建。
另外如果不想在每个 UserMapper 上添加 @Mapper
注解,可以使用 @MapperScan
注解,可以配置在配置类或主启动类上,用于配置扫描指定包下的 Mapper,但是在使用 @Autowired
注入的时候,IDEA 会飘红报错,但是不影响使用,如果不想飘红报错,可以使用 @Resource
注解注入。
# 5 编写service
编写业务实现类service,和对应的service接口,通过 service 调用 mapper,获取数据。
UserServiceImpl.java,添加@Service注解:
package com.foooor.helloplus.service.impl;
import com.foooor.helloplus.mapper.UserMapper;
import com.foooor.helloplus.pojo.User;
import com.foooor.helloplus.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
/**
* 查询所有用户
*/
public List<User> selectAllUser() {
List<User> userList = userMapper.selectList(null);
return userList;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
就提供了一个查询所有用户的方法,selectList
方法是 BaseMapper 提供的,参数是查询条件,这里是查询所有数据,所以条件传空null。
对应的接口,IUserService.java
package com.foooor.helloplus.service;
import com.foooor.helloplus.pojo.User;
import java.util.List;
public interface IUserService {
/**
* 获取所有用户信息
*/
List<User> selectAllUser();
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 6 编写controller
通过接口调用 service,获取数据。
UserController.java
package com.foooor.helloplus.controller;
import com.foooor.helloplus.pojo.User;
import com.foooor.helloplus.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
/**
* 获取所有用户信息
*/
@GetMapping("/all")
public List<User> selectAll() {
return userService.selectAllUser();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 7 测试
启动 SpringBoot 项目。
请求接口添加数据:http://localhost:8080/user/all
# 8 项目结构
可以看到使用 MyBatis 不用编写接口方法,直接使用 BaseMapper 中提供的方法就可以了,BaseMapper 针对增删改查提供了很多的方法,使用起来很方便,下面会系统的学习一下。
# 2.3 日志配置
为了便于分析执行的 SQL,在项目中添加一下日志配置,这样可以打印执行的 SQL。
因为 Spring Boot 默认使用 SLF4J 作为日志门面,并结合 Logback 作为日志实现。
所以在 resources 目录下创建 logback-spring.xml
配置文件,并编辑内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义一个控制台的日志输出 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义日志文件路径 -->
<!-- 控制台输出,通常用于开发环境 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 设置根日志记录器,如果没有激活任何特定Profile,则使用默认配置 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
<!-- 设置 MyBatis 日志级别为 INFO -->
<logger name="org.mybatis" level="INFO" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
<!-- 设置特定包的日志级别 -->
<logger name="com.foooor" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE" />
</logger>
</configuration>
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
上面只是定义了控制台的输出,SpringBoot 中的日志配置,查看 SpringBoot 教程 (opens new window) 中的 日志配置 (opens new window) 。
除了上面的配置方式,可以通过如下配置让 MyBatis 打印日志:
在 application.yaml 中配置
# mybaits-plus配置
mybatis-plus:
mapper-locations: classpath*:/mapper/*Mapper.xml
global-config:
banner: false
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志
2
3
4
5
6
7