背景
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; }
推荐使用方法二,这样不用每次都取设置更新时间,简化代码!!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论