1.先说场景,在对mysql数据库表数据插入或者更新时都得记录时间和用户id
传统实现有点繁琐,这里还可以封装一下公共方法。
2.解决方法:
2.1:使用aop切面编程(记录一下,有时间再攻克)。
2.2:使用@TableField()注解。
3.我使用的@TableField 注解实现,因为没有很多的业务处理,单纯的记录一下,以下是具体实现
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { // 在插入时自动填充 create_time 和 update_time 字段 this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); this.strictInsertFill(metaObject, "createBy", String.class, BaseUtlis.getCurrentUser().getId()); } @Override public void updateFill(MetaObject metaObject) { // 在更新时自动填充 update_time 字段 this.strictUpdateFill(metaObject, "updateTime",Date.class, new Date()); this.strictInsertFill(metaObject, "updateBy", String.class, BaseUtlis.getCurrentUser().getId()); } }
注: 字段需要跟实体类对应起来,我项目架构是使用了驼峰命名使用下划线后字母大写。BaseUtlis.getCurrentUser().getId(),这个是我封装的一个获取当前登录用户的方法。
参数解析:
this.strictUpdateFill(metaObject, "updateTime",Date.class, new Date());
metaObject:对象
updateTime:实体类目标字段
Date.class:数据类型
new Date():具体值
4.yml配置
mybatis-plus: global-config: db-config: meta-object-handler: com.zuodou.mymeta.MyMetaObjectHandler
5.在对应实体类的字段上加
@TableField(fill = FieldFill.UPDATE)
或者
@TableField(fill = FieldFill.INSERT)
(侵权联系删除)