java使用mybatis-plus更新操作时updateTime不自动更新的问题解决

我最近在使用springboot开发过程中,发现使用mybatis-plus更新操作时updateTime不自动更新;如果updateTime不更新的话,会影响我们对数据的一些判断,比如更改了一个数据,不知道到底改了没改,或者对数据统计也有影响,造成数据统计不准确。

现象与原因

虽然,我们再数据库字段设计中使用:

`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'

但是,使用mybatis-plus的更新方法,任然不能对时间进行更新;
比如使用如下方法:

/**
 * 进行更新操作
 */
openOrder.updateById()

openOrderService.saveOrUpdateBatch();
// ....... 等等方法

这些方法使用之后,都没有对updateTime数据进行更新。

原因:当selectByld从数据库取出旧数据,然后修改自己想修改的字段后调用updateByld,会发现update time字段不会更新,这是因为selectByld可以取出update time的旧值,更新时填充策路会判断属性已有值,不进行自动填充,因此update time不会自动更新。而且官方目前没有直接提供强制更新的方法。
查看fillStrategy方法源码,我们也可以看到只有属性没有被填充值,才会执行set方法。

解决办法

解决方法一:更新时设置更新时间;

	TDZopenOrder openOrder = openOrderService.getById(orderId);
	openOrder.setOrderId(washOrderId);
	openOrder.setUpdateTime(LocalDateTime.now());
	openOrder.updateById()

解决方法二:实体上设置更新时间

	public class TDZopenOrder {
	    @ApiModelProperty("更新时间")
	    @TableField(update = "now()")
	    private LocalDateTime updateTime;
	}

推荐使用方法二,这样不用每次都取设置更新时间,简化代码!!!

以上,就是我对这个问题的处理与解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值