Mybatis-plus
简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
快速开始
参照官网快速开始的样例,官网用的是h2数据库,我这里用的是Mysql。
创建数据库
schema
,并执行以下脚本。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19DROP 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)
);
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<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>测试依赖如下。
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<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</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>
</dependencies>创建一个实体类
1
2
3
4
5
6
7
8
9
10package com.yw.pojo;
import lombok.Data;
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}创建Mapper接口
1
2
3
4
5
6
7
8package com.yw.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yw.pojo.User;
import org.springframework.stereotype.Repository;
public interface UserMapper extends BaseMapper<User> {}配置数据源和日志
1
2
3
4
5
6
7
8
9
10
11# 配置MySQL
spring:
datasource:
username: root
password: password
url: jdbc:mysql://localhost:3306/schema?userUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置日志,以便更好查看结果
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl添加扫描Mapper文件的注解
1
2
3
4
5
6
7
8
9
10
11
12
13package com.yw;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}测试类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22package com.yw;
import com.yw.Mapper.UserMapper;
import com.yw.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
class DemoApplicationTests {
private UserMapper userMapper;
public void testSelect() {
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
}
然后就完成了。这的确比mybatis简单了不少。
mybatis大概流程是导入依赖,定义实体类,定义mapper接口,创建绑定mapper接口的xml配置文件,配置数据源并绑定mybatis的配置文件和实体类,然后才能使用。现在简单了很多。
主键生成策略
雪花算法
主键生成策略有很多,不过主要学习一下这个雪花算法。
首先来做个插入的测试。
1 | package com.yw; |
这个测试是没有设置主键id
的值的,来看一下主键的生成。
插入成功之后看到数据是这样的。
这么一长串的id
是什么东西呢,我们在官网看到主键有个注释@TableId
,点进去看看源码。
1 | package com.baomidou.mybatisplus.annotation; |
这里就可以看到主键是可以可无的,下面是默认的主键生成策略,我们在点IdType
进去看看有什么策略。
1 | package com.baomidou.mybatisplus.annotation; |
在这里就看到当主键为空的时候,会有一个默认的生成策略ASSIGN_ID
,这个策略的默认实现算法是雪花算法
。
总结
官网已经将上述方法已经总结的很好了,我就直接放官方的表了。
值 | 描述 |
---|---|
AUTO | 数据库ID自增(需要数据库也要设置为自增) |
NONE | 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) |
INPUT | insert前自行set主键值 |
ASSIGN_ID | 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默认实现类为DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默认default方法) |
分布式全局唯一ID 长整型类型(please use ASSIGN_ID ) |
|
32位UUID字符串(please use ASSIGN_UUID ) |
|
分布式全局唯一ID 字符串类型(please use ASSIGN_ID ) |
从官网的删除线和源码来看,后面三种是已经不支持使用了的。
默认的生成策略是NONE,相当于INPUT,就是自己设置主键的值,当主键没有设值的时候,默认是使用ASSIGN_ID雪花算法。
代码生成器
首先需要引入依赖。
1 | <!-- 代码生成器 --> |
引擎可以选择其他的,这里就使用velocity
。
这里给出一个比较通用的配置。
想要更加自定义的配置可以参考代码生成器的配置文档
https://baomidou.com/pages/981406/
1 | import com.baomidou.mybatisplus.annotation.FieldFill; |