MyBatis-Plus中公共字段的统一处理的实现
作者:秋天code
在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,本文主要介绍了MyBatis-Plus中公共字段的统一处理的实现,具有一定的参考价值,感兴趣的可以了解一下
数据库中一些表的公共字段,例如修改时间、修改人、创建时间、创建人,我们一般都是这样来处理的:
employee.setCreateTime(LocalDateTime.now()); employee.setUpdateTime(LocalDateTime.now()); employee.setCreateUser(UserHolder.get()); employee.setUpdateUser(UserHolder.get()); // UserHolder是自己封装的工具类,用来获取当前系统用户
在对每个表记录进行修改时,这四行代码都要重复出现,甚是繁琐,因此MyBatis-Plus中提供了对这些公共字段处理的简化手段。
大概就是两个步骤:
在实体类的属性上,使用@TableField中的fill属性设定此字段的填充策略
@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT) private Long createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private Long updateUser;
@TableField中的fill属性值是一个枚举类,代表此字段的填充策略,这个枚举类有四个值:
- FieldFill.DEFAULT,默认策略,即不填充
- FieldFill.INSERT,插入时进行填充
- FielFill.UPDATE,更新时进行填充
- FieldFill.INSERT_UPDATE,在插入和更新时进行填充
实现MetaObjectHandler接口,自定义填充逻辑
//自定义元数据对象处理器 @Component public class MyMetaObjectHandler implements MetaObjectHandler { //插入操作时自动填充的逻辑 @Override public void insertFill(MetaObject metaObject) { metaObject.setValue("createTime", LocalDateTime.now()); metaObject.setValue("updateTime", LocalDateTime.now()); Long id = UserHolder.get(); if (id != null) { metaObject.setValue("createUser", id); metaObject.setValue("updateUser", id); } } //更新操作时自动填充的逻辑 @Override public void updateFill(MetaObject metaObject) { metaObject.setValue("updateTime", LocalDateTime.now()); Long id = UserHolder.get(); if (id != null) { metaObject.setValue("updateUser", id); } } }
这个MetaObjectHandler接口有两个抽象方法,分别代表在INSERT和UPDATE时的填充逻辑。
接下来,在业务逻辑中,就不需要对这些公共字段做处理了,只要处理核心的业务字段就可以了。
到此这篇关于MyBatis-Plus中公共字段的统一处理的实现的文章就介绍到这了,更多相关MyBatis-Plus公共字段统一处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!