当前位置: 首页 > news >正文

MyBatis-Plus中公共字段的统一处理

数据库中一些表的公共字段,例如修改时间、修改人、创建时间、创建人,我们一般都是这样来处理的:

employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
employee.setCreateUser(UserHolder.get());
employee.setUpdateUser(UserHolder.get()); // UserHolder是自己封装的工具类,用来获取当前系统用户

在对每个表记录进行修改时,这四行代码都要重复出现,甚是繁琐,因此MyBatis-Plus中提供了对这些公共字段处理的简化手段。
大概就是两个步骤:

  1. 在实体类的属性上,使用@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,在插入和更新时进行填充
  1. 实现MetaObjectHandler接口,自定义填充逻辑
//自定义元数据对象处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {//插入操作时自动填充的逻辑@Overridepublic 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);}}//更新操作时自动填充的逻辑@Overridepublic void updateFill(MetaObject metaObject) {metaObject.setValue("updateTime", LocalDateTime.now());Long id = UserHolder.get();if (id != null) {metaObject.setValue("updateUser", id);}}
}

这个MetaObjectHandler接口有两个抽象方法,分别代表在INSERTUPDATE时的填充逻辑。
接下来,在业务逻辑中,就不需要对这些公共字段做处理了,只要处理核心的业务字段就可以了。

http://www.lryc.cn/news/136088.html

相关文章:

  • SQL的导出与导入
  • 记录一次wordpress项目的发布过程
  • HTML详解连载(8)
  • Linux系统之安装OneNav个人书签管理器
  • 主程技术分享: 游戏项目帧同步,状态同步如何选
  • ChatGPT-4: 半年的深度使用思考
  • 【健康医疗】Axure用药提醒小程序原型图,健康管理用药助手原型模板
  • ERROR in static/js/xxx.js from UglifyJs
  • 阿里云ECS服务器安装PostgreSQL
  • 【核磁共振成像】傅里叶重建
  • Camunda 工作流节点跳转 - 多实例节点判断和跳转
  • MySQL不停重启问题
  • ol-cesium 暴露 Cesium viewer 对象以及二三维切换、viewer 添加点功能示例
  • 国产化-达梦数据库安装2
  • 延长OLED透明屏的使用寿命:关键因素与有效方法分享
  • 域名是指哪一部分?
  • MPP 还是主流架构吗
  • ubuntu查看网速
  • 【官方中文文档】Mybatis-Spring #使用 MyBatis API
  • go gorm belong to也就是多对一的情况
  • 亚马逊云科技 云技能孵化营——机器学习心得
  • Django实现音乐网站 ⒀
  • PySide6学习笔记--基础环境的安装配置
  • 算法通关村第九关——中序遍历与搜索树
  • 测试框架pytest教程(5)运行失败用例-rerun failed tests
  • 【车载开发系列】UDS当中的时间参数
  • PDF中的表格怎么转换为Excel?这两个工具一定得收藏!
  • ssh scp sshpass
  • leetcode 1996. 游戏中弱角色的数量(排序的魅力)
  • 从头到尾说一次 Spring 事务管理(器) | 京东云技术团队