mybatis plus 自动更新数据库时间的小坑
描述问题
昨天测试又给我提了一个bug(我怎么觉得自己是个被bug驱动的渣渣程序员),说他更新了某条数据, 但是这条数据的修改时间没有变化. 我的第一反应是怎么可能,我在创建数据库表的时候明明设置了修改时间会自动更新呀? 但是人家就是测试这么个bug呀, 我也只能认怂, 修吧. 经过一番查找, 最后确定, 是我的代码写的有问题, 这里我重现一下犯罪现场, 对自己以兹鼓励哈.
犯罪数据准备
假设我们的数据库表如下所示, 注意这里的create_time和modified_time的设置, 二者都会在插入数据时自动填充, 并且modified_time会在更新数据时自动更新. 不行你可以在数据库中执行插入和更新试试就一目了然了.
犯罪代码准备
犯罪过程重现
执行插入操作:
数据库结果:
插入时执行的sql:
执行更新操作:
数据库结果:
更新时执行的sql:
看到这里, 我相信眼睛犀利的你应该已经发现我哪里错了, 是的, 就是你想的那样, 我在执行更新操作之前, 首先把这个对象查询出来了, 然后把属性值赋予他之后,我才去执行了更新, 此时我使用的对象正是我查询出来的, 而它的modifiedTime是有值的, 我每次给人家更新成最开始的时间,还埋怨人家咋不给我自动更新, 做人难, 做代码也挺难. 既然知道了原因, 那就改吧.
毁尸灭迹啦
方法1---直接更新, 不要先查询----核心是保证modifiedTime 没有值
方法2----使用@TableField + update注解
方法三-----使用@TableFiled + fill 注解
版权声明: 本文为 InfoQ 作者【双儿么么哒】的原创文章。
原文链接:【http://xie.infoq.cn/article/c3318a150ce521699d54d0d01】。文章转载请联系作者。
评论