关于mybatis-plus自动填充策略失效的原因


**

关于mybatis-plus自动填充策略失效的情况

**

在更新数据库的时候,发现update_time字段的自动填充失效了,实体里面的字段的注解是加上了的。
@TableField(value = “update_time”, fill = FieldFill.INSERT_UPDATE)
有可能的原因:mybatis配置文件MyBatisPlusConfig配置了乐观锁,乐观锁会让自动填充失效。
配置乐观锁之后updateById()方法会出现两种情况:

1、从数据库查出来的数据,无法进行自动填充

(注:没有乐观锁的时候是可以进行填充的,无论这个字段是null还是有值)

		UserPoJo poJo = service.getById(id);
        poJo.setName(name);
        service.updateById(poJo);

无法进行填充可能有三种原因,如下
1)如果数据库里这个字段本来就是null,那么根据严格填充策略,null值是不进行填充的。
在这里插入图片描述
2)填充的数据类型和实体类定义的数据类型不一致。例如你的updateTime是 java.util.Date类型的,但是填充的是LocalDateTime,就会导致填充的数据为空。
3)如果数据库中的字段已经有值了,也不会填充。
在这里插入图片描述

2、直接new的对象,去更新数据库的数据,就会自动填充(无论这个字段是null还是有值)

		UserPoJo poJo = new UserPoJo();
        poJo.setId(id);
        poJo.setName(name);
        service.updateById(poJo);

解决方案

1.不管有没有乐观锁,直接使用boolean update(T entity, Wrapper updateWrapper)方法

		LambdaUpdateWrapper<UserPoJo> wrapper = new LambdaUpdateWrapper<>();
        wrapper.eq(UserPoJo::getId, id);
        wrapper.set(UserPoJo::getName, name);
        //不会自动填充update_time
        //service.update(wrapper);
        //会自动填充update_time
        service.update(new UserPoJo(), wrapper);

2.不使用乐观锁,然后使用boolean updateById(T entity)方法

3.在配置了乐观锁的情况下,再进行自动填充功能配置,这样就无论哪种方法都可以使用了

自动填充功能配置:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值