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*/@Overridepublic void insertFill(MetaObject metaObject) {this.setFieldValByName("createTime", new Timestamp(new Date().getTime()), metaObject);}/*** 更新时的填充策略* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("updateTime", new Timestamp(new Date().getTime()), metaObject);}}

MetaObjectMyBatis-Plus中的一个类,它提供了对实体对象字段的访问和操作。setFieldValByName方法允许我们根据字段名动态地设置实体对象的字段值。

这样我们在调用mapperinsertupdate方法时,就会自动填充两个时间的值,非常方便。

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字段设置当前时间戳的值。

这样一来,创建时间就可以灵活配置了,更新时间也可以这样改,但是一般来说用不着,更新时间用当前时间是没问题的,很少有需要手动调整更新时间的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478713.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自养号测评低成本高效率推广,安全可控

测评的作用在于让用户更真实、清晰、快捷地了解产品以及产品的使用方法和体验。通过买家对产品的测评,也可以帮助厂商和卖家优化产品缺陷,提高用户的使用体验。这进而帮助他们获得更好的销量,并更深入地了解市场需求。因此,测评在…

区块链 之 默克尔树

默克尔树简介 欢迎阅读 BTC网络 之 区块裁剪 什么是默克尔树? 默克尔树(Merkle Tree)是一种树状数据结构,被广泛用于比特币等区块链系统中,用于高效地组织和验证数据的完整性。这个树状结构由唯一的根哈希值标识&am…

PostgreSQL按日期列创建分区表

在PostgreSQL中,实现自动创建分区表主要依赖于表的分区功能,这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据,通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…

Linux-目录I/O-004

学习重点: 1.目录I/O的函数接口 2.目录的遍历,目录的递归遍历 1.【mkdir】 1.1函数原型 【int mkdir(const char *pathname, mode_t mode);】1.2函数功能 创建目录文件1.3函数参数 1.3.1【pathname】 文件路径1.3.2【mode】 文件的权限1.4返回值 …

activeMq将mqtt发布订阅转成消息队列

1、activemq.xml置文件新增如下内容 2、mqttx测试发送: 主题(配置的模糊匹配,为了并发):VirtualTopic/device/sendData/12312 3、mqtt接收的结果 4、程序处理 package comimport cn.hutool.core.date.DateUtil; imp…

Postgresql 怎么实现在局域网中访问

安装PostgreSQL后,默认情况下只能在本机进行连接访问,如果需要在其他主机上访问PostgreSQL数据库服务器,需要进行配置。 安装连接PostgresSQL数据库可以参考博文:安装连接PostgresSQL数据库教程 一. 整体步骤 主要包括下面几个步…

响应式建站系统源码:一站式建站平台 带完整的安装代码包以及搭建教程

在网络技术日新月异的今天,网站建设已经成为企业、个人展示自身形象、提供服务的重要窗口。然而,传统的网站建设方式往往需要投入大量的时间、金钱和人力成本,且对于非专业人士来说存在较高的技术门槛。为了解决这些问题,罗峰给大…

业务型 编辑器组件的封装(复制即可使用)

使用需要安装 wangeditor npm i --save wangeditor import React from react; import E from wangeditor; import ./index.lessclass EditorElem extends React.Component {constructor(props) {super(props);this.isChange false;this.state {}}componentDidMount() {con…

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

好书推荐丨《细说机器学习:从理论到实践》

文章目录 写在前面机器学习推荐图书内容简介编辑推荐作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本有关机器学习的全新正版书籍&#xff0c;对机器学习、人工智能感兴趣的小伙伴们快来看看吧~ 机器学习 机器学习&#xff08;Machine Learning, ML&…

基于WOA优化的Bi-LSTM多输入分类预测(Matlab)鲸鱼算法优化双向长短期神经网络分类预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 鲸鱼优化算法&#xff08;WOA&#xff09;&#xff1a; 双向长短期神经网络&#xff08;Bi-LSTM&#xff09;&#xff1a…

配置Python环境及job运行的虚拟环境

1、配置Jenkins的Python环境&#xff1a;Manage Jnekins-Global Tool Configuration-Python 2、安装pyenv插件 此插件会给每个job都创建一个虚拟Python环境 安装后&#xff0c;在job config-build中选择 virtualenv builder build job的时候会自动在/opt/jenkins(node主机的…