# 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
