当前位置: 代码网 > it编程>编程语言>Java > Mybatis-Plus更新时间字段不生效的解决

Mybatis-Plus更新时间字段不生效的解决

2024年09月22日 Java 我要评论
背景mybatis-plus是在mybatis的基础上只做增强不做改变,主要是为简化开发。项目的背景是使用的就是mybatis-plus,但是在运行项目过程中发现一个问题,当使用mybatis-plu

背景

mybatis-plus是在mybatis的基础上只做增强不做改变,主要是为简化开发。项目的背景是使用的就是mybatis-plus,但是在运行项目过程中发现一个问题,当使用mybatis-plus进行数据的更新的时候,更新字段没有按照我们所预想的进行对应的时间的更新。

创建这个字段的语句如下所示:

 `update_time` timestamp null default current_timestamp on update current_timestamp comment '更新时间'

原因分析

使用mybatis-plus的更新方法,进行对应数据实体的更新,比如使用如下方法:

xxx.updatebyid()
// ....... 等等方法

这些方法使用之后,发现没有对updatetime字段数据进行更新。

原因分析:

当selectbyld从数据库取出旧数据,然后修改自己想修改的字段后调用updatebyid,会发现updatetime字段不会更新,这是因为selectbyld可以取出updatetime的旧值,更新时填充策路会判断属性已有值,不进行自动填充,因此updatetime不会自动更新。而且官方目前没有直接提供强制更新的方法。

查看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;
	}

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com