在项目设计的数据库中经常会有一些通用的字段(如:创建人、创建时间、更新人、更新时间等)。
如果每个表都有这些通用字段通常会使用切面处理,只有部分表有通用字段就在新增和更新方法作手动添加。
项目引入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 }
|
公司使用的是内部改造版的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) { } } }
|