MybatisPlus创建时间不想用默认值的问题
MybatisPlus创建时间不想用默认值
我们知道,MybatisPlus可以给一些字段设置默认值,比如创建时间,更新时间,分为插入时设置,和更新时设置。
常见的例子
/** * 创建时间 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "create_time", fill = FieldFill.INSERT) private Timestamp createTime; /** * 修改时间 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) private Timestamp updateTime;
其中
@TableField(value = "create_time", fill = FieldFill.INSERT):
这是一个MyBatis-Plus的注解,用于配置数据库字段映射。
value = "create_time"表示这个变量映射到数据库表中的create_time字段。fill = FieldFill.INSERT表示在插入(INSERT)记录时,这个字段会被自动填充。
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE):
类似于上面的createTime的注解,但fill = FieldFill.INSERT_UPDATE 表示在插入(INSERT)或更新(UPDATE)记录时,这个字段会被自动填充。
对应的,我们需要设置 MpMetaObjectHandler。
@Component
public class MpMetaObjectHandler implements MetaObjectHandler {
/**
* 插入时的填充策略
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Timestamp(new Date().getTime()), metaObject);
}
/**
* 更新时的填充策略
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Timestamp(new Date().getTime()), metaObject);
}
}MetaObject是MyBatis-Plus中的一个类,它提供了对实体对象字段的访问和操作。
setFieldValByName方法允许我们根据字段名动态地设置实体对象的字段值。
这样我们在调用mapper的insert和update方法时,就会自动填充两个时间的值,非常方便。
BUT:
有些时候,我希望自己设置一个创建时间进去,比如我在导入数据的时候,插入这张表,人家excel里面就有创建时间,那我当然不希望用当前时间啦!
结果,让人崩溃的是,哪怕你设置了 createTime ,最终在 insert 的时候,还是会走到 insertFill 的逻辑,保存了当前时间。
这实在是令人崩溃,小编试了好多次,终于找到了办法。我们只需要修改一下 handler。
if(metaObject.hasGetter("createTime") && metaObject.getValue("createTime") == null){
this.setFieldValByName("createTime", new Timestamp(new Date().getTime()), metaObject);
}这段代码是对insertFill方法的一个增强,它添加了一个条件判断来确保只有在createTime字段存在且其值为null时,才会为createTime字段设置当前时间戳的值。
这样一来,创建时间就可以灵活配置了,更新时间也可以这样改,但是一般来说用不着,更新时间用当前时间是没问题的,很少有需要手动调整更新时间的情况。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java数据结构与算法之双向链表、环形链表及约瑟夫问题深入理解
这篇文章主要介绍了Java数据结构与算法之双向链表、环形链表及约瑟夫问题深入理解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-09-09
java.lang.IllegalStateException:方法有太多主体参数问题
这篇文章主要介绍了java.lang.IllegalStateException:方法有太多主体参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
Java List的sort()方法改写compare()实现升序,降序,倒序的案例
这篇文章主要介绍了Java List的sort()方法改写compare()实现升序,降序,倒序的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-03-03
spring Cloud微服务阿里开源TTL身份信息的线程间复用
这篇文章主要为大家介绍了spring Cloud微服务中使用阿里开源TTL身份信息的线程间复用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-01-01
Java8内存模型PermGen Metaspace实例解析
这篇文章主要介绍了Java8内存模型PermGen Metaspace实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-03-03


最新评论