# mybatisPlus


# 简介

官网: https://baomidou.com/

参考教程:https://baomidou.com/pages/24112f/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。


# 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本CURD ,性能基本无损耗,直接面向对象操作
  • 强大的CRUD操作:内置通用Mapper、 通用Service ,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求
  • 支持Lambda形式调用:通过Lambda表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持多种数据库:支持MySQL、 MariaDB、 Oracle、 DB2、H2、HSQL、 sQLite、 Postgre、 sQLServer2005、 SQLServer等多种数据库
  • 支持主键自动生成:支持多达4种主键策略(内含分布式唯一 ID生成器- Sequence) ,可自由配置,完美解决主键问题
  • 支持XML热加载: Mapper对应的XML支持热加载,对于简单的CRUD操作,甚至可以无XML启动
  • 支持ActiveRecord模式:支持ActiveRecord形式调用,实体类只需继承Model类即可进行强大的CRUD操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词( order、 ke.....自动转义,还可自定义关键词
  • 内置代码生成器:采用代码或者Maven插件可快速生成Mapper、Model 、Service 、Controller 层代码,支持模板引

# 入门

# 一、创建并初始化数据库

1、创建数据库: mybatis_plus

2、创建 User 表

其表结构为:

id name age email
1 Jone 18 test1@baomidou.com
2 Jack 20 test2@baomidou.com
3 Tom 28 test3@baomidou.com

对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
)

1
2
3
4
5
6
7
8
9
10

user 表中插入数据:

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
1
2
3
4
5
6
7
8

# 二、初始化工程

使用 Spring Initializr 快速创建一个 Spring Boot 工程

Group: com.dyilin

Artifact: mybatis-plus

版本:

# 三、添加依赖

1、引入依赖

spring-boot-starter, spring-boot-starter-test

添加: mybatis-plus-starter, mysql, lombok

lombok:在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!--mybatis-plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.5</version>
    </dependency>

    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--lombok用来简化实体类-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>
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

注意:引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。

# 四、配置

application.properties配置文件中添加 MySQL 数据库的相关配置

因为我是用的是 MySQL8.0 以上版本,这个版本与之前的 MySQL5.1 版本有所不同,但是 MySQL8.0 的配置 MySQL5.1 也可以使用

MySQL8.0 配置

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
1
2
3
4

WARNING

1、这里的 url 使用了 ?serverTimezone=GMT%2B8 后缀,因为Spring Boot 2.1 集成了 8.0版本的jdbc驱动,这个版本的 jdbc 驱动需要添加这个后缀,否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value is unrecognized or represents more

2、这里的 driver-class-name 使用了 com.mysql.cj.jdbc.Driver ,在 jdbc 8 中 建议使用这个驱动,之前的 com.mysql.jdbc.Driver 已经被废弃,否则运行测试用例的时候会有 WARN 信息

# 五、编写代码

# 1、主类

在 spring boot 启动类中添加 @MapperScan注解,扫描 Mapper 文件夹

WARNING

注意:扫描的包名根据实际情况修改

@SpringBootApplication
@MapperScan("com.atguigu.mybatisplus.mapper")
public class MybatisPlusApplication {
    ......
}
1
2
3
4
5

# 2、实体

创建包 ==entity== 编写实体类 ==User.java==

@Data
public class User{
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
1
2
3
4
5
6
7

# 3、mapper

创建包 mapper 编写 Mapper接口: UserMapper.java

public interface UserMapper extends BaseMapper<User>{
    
}
1
2
3

# 六、开始使用

添加测试类、进行功能测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectList() {
        System.out.println(("----- selectAll method test ------"));
        //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
        //所以不填写就是无任何条件
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

DANGER

注意:

IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。

为了避免报错,可以在 dao 层 的接口上添加 @Repository 注

控制台输出:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
1
2
3
4
5

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

# 七、配置日志

查看 sql 输出日志

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
1
2