springboot整合mybatis-plus

官网https://baomidou.com

引入依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
spring:
# 数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root

mybatis-plus:
# mapper文件位置,默认classpath*:/mapper/**/*.xml
mapper-locations: classpath*:/mapper/**/*.xml
global-config:
db-config:
# 在 insert 的时候的字段验证策略,默认不为null(即字段不为null时都可以插入)
insert-strategy: NOT_NULL
# 在 update 的时候的字段验证策略,默认不为null(即字段不为null时都可以修改)
update-strategy: NOT_NULL

配置类

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
@Configuration
@MapperScan("org.example.dao")
public class MybatisPlusConfiguration {

/**
* 主键生成策略,默认为雪花算法,参考DefaultIdentifierGenerator
*/
@Bean
public IdentifierGenerator idGenerator() {
return new DefaultIdentifierGenerator();
}

/**
* 分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}

/**
* 字段填充
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler(){

// 插入时填充字段,如果有这个字段
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}

// 修改时填充字段,如果有这个字段
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
};
}
}

实体类

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
@TableName("user")
public class User {

/**
* @TableId 标识主键
* IdType.AUTO:使用数据库自增 ID 作为主键。
* IdType.NONE:无特定生成策略,如果全局配置中有 IdType 相关的配置,则会跟随全局配置。
* IdType.INPUT:在插入数据前,由用户自行设置主键值。
* IdType.ASSIGN_ID:自动分配 ID,适用于 Long、Integer、String 类型的主键。默认使用雪花算法通过 IdentifierGenerator 的 nextId 实现。@since 3.3.0
* IdType.ASSIGN_UUID:自动分配 UUID,适用于 String 类型的主键。默认实现为 IdentifierGenerator 的 nextUUID 方法
*/
@TableId
private Long id;
private String username;
private String password;
/**
* @TableField 字段
* fill:自动填充策略
* INSERT 插入时填充
* UPDATE 修改时填充
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
// getter setter ...
}

测试

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
@SpringBootTest
public class MyTests {

@Autowired
UserMapper userMapper;

@Test
public void insert() {
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
userMapper.insert(user);
}

@Test
public void update() {
User user = new User();
user.setId(1848777892806635522L);
user.setPassword("test");
userMapper.updateById(user);
}

@Test
public void selectById() {
User user = userMapper.selectById(1848777892806635522L);
System.out.println(user);
}

@Test
public void selectList() {
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(User.class)
.eq(User::getUsername, "admin");
List<User> users = userMapper.selectList(wrapper);
System.out.println(users);
}

@Test
public void selectPage() {
Page<User> page = new Page<>(1, 10);
userMapper.selectPage(page, null);
System.out.println(page.getRecords());
}
}