es数据更新时间_mybatis plus 自动更新数据库时间的小坑

描述问题

        昨天测试又给我提了一个bug(我怎么觉得自己是个被bug驱动的渣渣程序员),说他更新了某条数据, 但是这条数据的修改时间没有变化. 我的第一反应是怎么可能,我在创建数据库表的时候明明设置了修改时间会自动更新呀? 但是人家就是测试这么个bug呀, 我也只能认怂, 修吧. 经过一番查找, 最后确定, 是我的代码写的有问题, 这里我重现一下犯罪现场, 对自己以兹鼓励哈.

犯罪数据准备

假设我们的数据库表如下所示, 注意这里的create_time和modified_time的设置, 二者都会在插入数据时自动填充, 并且modified_time会在更新数据时自动更新. 不行你可以在数据库中执行插入和更新试试就一目了然了.

CREATE 
犯罪代码准备
// doamin
// controller
犯罪过程重现

执行插入操作: a7fdab6502a6ffdaf9b3fda32953cf3d.png 

数据库结果: 2f41aef4db3002d7e033c208453b122a.png

插入时执行的sql: 48967d6826459378890def170bec102d.png

执行更新操作: 9625f5f5fe86b97248efc33ebd585309.png

数据库结果: 65947430db9b11bb8d27371c0b1496ae.png

更新时执行的sql: 8cd07cafcc68e4a8936a672dc6d5281c.png

看到这里, 我相信眼睛犀利的你应该已经发现我哪里错了, 是的, 就是你想的那样, 我在执行更新操作之前, 首先把这个对象查询出来了, 然后把属性值赋予他之后,我才去执行了更新, 此时我使用的对象正是我查询出来的, 而它的modifiedTime是有值的, 我每次给人家更新成最开始的时间,还埋怨人家咋不给我自动更新, 做人难, 做代码也挺难. 既然知道了原因, 那就改吧.

毁尸灭迹啦
方法1---直接更新, 不要先查询----核心是保证modifiedTime 没有值
@RequestMapping("/update")

97e6db69193591d576600d0bbac5ee38.png ace7f6018c7c3ce95c8c4f81a0662ccd.png

@RequestMapping("/update")

4e0f4cc548bba7498ae18c96af3675f6.png 249d81691829cb89f714914702dd3bf6.png

方法2----使用@TableField + update注解

@TableField(update = "now()")
private LocalDateTime modifiedTime;

69b99d1d9e94d3267423ffce5673aa61.png 087da0e97f8a772db680c299c3b8677f.png b600853833b07b80c3e563848be8e962.png

方法三-----使用@TableFiled + fill 注解


@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime modifiedTime;

@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert field....");
this.setFieldValByName("createTime", LocalDateTime.now(),metaObject);
this.setFieldValByName("modifiedTime", LocalDateTime.now(),metaObject);
}

@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("modifiedTime", LocalDateTime.now(),metaObject);
}
}

b829127c770709d6c38e08e654bef6db.png 12c6c49724c27e5976e04210c1c6d3ad.png 5935872de048d29d04535afd4a9fc1fd.png

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值