Mybatis-Plus更新时间字段不生效的解决
背景
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;
}推荐使用方法二,这样不用每次都取设置更新时间,简化代码!!!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Spring @value和@PropertySource注解使用方法解析
这篇文章主要介绍了Spring @value和@PropertySource注解使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-11-11
spring boot集成mongodb的增删改查的示例代码
这篇文章主要介绍了spring boot集成mongodb的增删改查的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
Spring boot 在idea中添加热部署插件的图文教程
这篇文章主要介绍了Spring boot 在idea中添加热部署插件的图文教程,本文通过图文并茂的形式给大家展示具体步骤,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-10-10
Mybatis返回值(resultType&resultMap)的具体使用
返回值属性有两种设置,一种是resultType,一种是resultMap,本文主要介绍了Mybatis返回值(resultType&resultMap)的具体使用,具有一定的参考价值,感兴趣的可以了解一下2023-08-08
springboot整合Quartz实现动态配置定时任务的方法
本篇文章主要介绍了springboot整合Quartz实现动态配置定时任务的方法,非常具有实用价值,需要的朋友可以参考下2017-10-10


最新评论