开发者

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

开发者 https://www.devze.com 2024-09-23 10:21 出处:网络 作者: Jerryean99
目录背景原因分析解决办法解决方法一解决方法二总结背景 MyBATis-Plus是在Mybatis的基础上只做增强不做改变,主要是为简化开发。项目的背景是使用的就是Mybatis-Plus,但是在运行项目过程中发现一个问题,当使用Myba
目录
  • 背景
  • 原因分析
  • 解决办法
    • 解决方法一
    • 解决方法二
  • 总结

    背景

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

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

     `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'

    原因分析

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

    XXX.updat编程客栈eById()
    // ....... 等等方法

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

    原因分析:

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

    查看fillStrategy方法源码,我们也可以看到只有属性没有被填充值,才会执行set方法。

    解决办法

    解决方法一

    更新时设置更新时间

    	TdzopenOrder openOrder = openOrwww.devze.comderService.getById(orderId);
    	openOrder.setOwww.devze.comrderId(washOrderId);
    	openOrder.setUpdateTime(LocalDateTime.now());
    	openmFYDsWAPOrder.updateById()

    解决方法二

    实体上设置更新时间

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

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

    总结

    以上为个人js经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消