MyBatis-Plus新增修改实现自动填充指定字段
# 1. 需要修改的字段在模型类上添加 @TableField(fill = FieldFill.xxx)
注解。
- FieldFill的选项:
package com.baomidou.mybatisplus.annotation;
/**
* 字段填充策略枚举类
*
* <p>
* 判断注入的 insert 和 update 的 sql 脚本是否在对应情况下忽略掉字段的 if 标签生成
* <if test="...">......</if>
* 判断优先级比 {@link FieldStrategy} 高
* </p>
*
* @author hubin
* @since 2017-06-27
*/
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入时填充字段
*/
INSERT,
/**
* 更新时填充字段
*/
UPDATE,
/**
* 插入和更新时填充字段
*/
INSERT_UPDATE
}
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
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
哪个字段在什么时候填充需要手动设置注解
/**
* 更新者
*/
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
1
2
3
4
5
2
3
4
5
# 2. 新建一个MetaObjectHandler的实现类MyMetaObjectHandler
package com.demo.mp.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Objects;
@Component // 注入bean
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* @Description: 新增时填充
*
* @auther: baohua.yin
* @date: 2021/11/2 2:26 下午
*/
@Override
public void insertFill(MetaObject metaObject) {
// this.setFieldValByName(字段名, 内容, metaObject:用这个对象进行填充用的,称为元数据对象);
this.setFieldValByName("createBy", "admin", metaObject);
// ================setFieldValByName 方法内的内容,有兴趣可以进去看一看,中文注释的==================================================
/// **
// * 通用填充
// *
// * @param fieldName java bean property name
// * @param fieldVal java bean property value
// * @param metaObject meta object parameter
// */
// default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject
// metaObject) {
// if (Objects.nonNull(fieldVal) && metaObject.hasSetter(fieldName)) {
// metaObject.setValue(fieldName, fieldVal);
// }
// return this;
// }
}
/**
* * @Description: 更新时填充
*
* @auther: baohua.yin
* @date: 2021/11/2 2:26 下午
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateBy", "admin", metaObject);
}
}
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
44
45
46
47
48
49
50
51
52
53
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
- 完成之后就可以使用了
注意: 当你设置了逻辑删除,在逻辑删除的时候,是不会进行修改填充的,这个需要注意一下。
上次更新: 2023/03/17, 16:17:59