背景:
在做一个SpringBoot2+MybatisPlus3项目时,要求数据库中有个更新时间(UPDATE_DATE)字段,在插入和更新数据时,字段自动插入/更新为当前时间;在网上搜了很多方法,发现下面的办法比较好,嘿嘿 记录了。
解决方案:
1、在实体类的属性上添加注解,如下
/**
* 新增/更新时间 自动填充
*/
@TableField(value = "UPDATE_DATE", fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
如上注解表示在新增和修改时自动填充字段。
2、新增配置类,实现MetaObjectHandler接口,并重写其方法,方法可自定义指定类型,我这里用的时间格式
@Component
public class Handler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("updateDate", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateDate", new Date(), metaObject);
}
}
完成上面两步配置后,再进行新增/修改操作,就不用再管UPDATE_DATE字段啦!
这里为什么不直接在数据库中配置呢?因为数据库中配置默认值,新增时可以满足,但是更新数据时需要写触发器,麻烦,而且会增加数据库负担。
如果不想写类去实现MetaObjectHandler接口,就在数据库中对字段配置默认值,这样新增自动填充就解决了,实体类中像下面的方法写,就能实现更新自动填充当前时间
/**
* 新增/更新时间 自动填充
*/
@TableField(value = "UPDATE_DATE", fill = FieldFill.UPDATE,update = "SYSDATE")
private Date updateDate;