mybatis-plus自动填充添加默认值

在项目设计的数据库中经常会有一些通用的字段(如:创建人、创建时间、更新人、更新时间等)。

如果每个表都有这些通用字段通常会使用切面处理,只有部分表有通用字段就在新增和更新方法作手动添加。

项目引入mybatis-plus后可以针对只有部分表有通用字段进行快捷处理,无需手动赋值

➡️Mybatis-Plus官网参考文档

一、实体类添加注解

给你需要自动填充的实体类,添加对应的注解,指定新增或更新时需要填充属性值

1
2
3
4
5
6
7
8
9
10
public class User {

// 注意!这里需要标记为填充字段
@TableField(.. fill = FieldFill.INSERT)
private String createUser;

@TableField(.. fill = FieldFill.INSERT)
private Date createDate;
....
}

注解中可选枚举类型如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
}

二、自定义实现类 MyMetaObjectHandler

公司使用的是内部改造版的Ruoyi框架,所以对应的自定义实现类如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
public class PlusMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {this.strictInsertFill(metaObject, "createTime", Date.class, new Date());} catch (Exception ignored) { }
try {this.strictInsertFill(metaObject, "createUserId", SecurityUtils::getUserId, Long.class);} catch (Exception ignored) { }
try {this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());} catch (Exception ignored) { }
try {this.strictInsertFill(metaObject, "updateUserId", SecurityUtils::getUserId, Long.class);} catch (Exception ignored) { }
}

@Override
public void updateFill(MetaObject metaObject) {
try {metaObject.setValue("updateTime", new Date());} catch (Exception ignored) { }
try {metaObject.setValue("updateUserId", SecurityUtils.getUserId());} catch (Exception ignored) { }
}
}

mybatis-plus自动填充添加默认值
http://blog.jingxiang.ltd/2024/04/18/mybatis-plus自动填充添加默认值/
作者
yemangran
发布于
2024年4月18日
许可协议