官方文档:MyBatis-Plus

常用插件

1.公共字段填充

对于每个实体类共有的属性字段,例如创建时间、修改时间、创建人、修改人,我们可以使用公共字段填充,来统一填充这些字段,这样我们在创建这些实体类的对象的时候就不需要set这些属性,实现丝滑开发

1
2
3
4
@TableField(fill = FieldFill.INSERT) //插入的时候填充
private String gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)//插入和修改的时候填充
private String gmtModified;

第一种配置的方法

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
package com.itheima.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
* @author GongChangjiang
* @version 1.0
* @Date 2023/5/25
* @Description 公共字段填充的配置
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

/**
* 插入时的字段填充
* @param metaObject 元对象
*/
@Override
public void insertFill(MetaObject metaObject) {
//创建时间的字段填充
metaObject.setValue("gmtCreate", LocalDateTime.now());
//修改时间的字段填充
metaObject.setValue("gmtModified", LocalDateTime.now());
}

/**
* 修改时的字段填充
* @param metaObject 元对象
*/
@Override
public void updateFill(MetaObject metaObject) {
//修改时间的字段填充
metaObject.setValue("gmtModified", LocalDateTime.now());
}
}

第二种配置的方法

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
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

@Override
public void insertFill(MetaObject metaObject) {
// 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
// 或者
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
// 也可以使用(3.3.0 该方法有bug)
this.fillStrategy(metaObject, "createTime", LocalDateTime.now());
}

@Override
public void updateFill(MetaObject metaObject) {
// 起始版本 3.3.0(推荐)
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
// 或者
this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
// 也可以使用(3.3.0 该方法有bug)
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now());
}
}

2.逻辑删除

1.配置全局的配置文件(可以省略)

1
2
3
4
5
mybatis-plus:
global-config:
db-config:
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

2.配置逻辑删除的组件(3.1.1版本之后不需要这一步,可以省略)

1
2
3
4
5
6
7
8
9
10
11
12
13
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfiguration {

@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}

3.在实体类上逻辑删除的字段上加上逻辑删除的注解

1
2
3
4
//value:表示不删除对应的值
//delval:表示删除对应的值
//正常的情况下1代表删除,0代表未删除,这里我们没有使用这个规则,下面设置的是自己的规则
@TableLogic(value = "1",delval = "0")