MyBatis 更新时新值为null时,updateById()更新失败

MyBatis 更新时新值为null时,更新失败

比如,类Rule中有个字段名为String note,备注是可以为空的。

note不为空时

  • 更新方法是,只输入要更新的值
  • 可以构造或者不构造实体对象
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","rule1").set("note", "cannot ignore");
userMapper.update(null, updateWrapper);

note为空时

可行操作

  • updateWrapper()方法,把可能为空的字段,如notes,手动设置。
    - 而对于一次更新,所有字段都有可能被更新的情况,这次我是用了反射,设置了所有可能被更新的字段
    - 因为updateWrapper的方法,会默认忽略未被set的方法

  • 手动写一个sql,在xml文件里。也可以绕开NOT NULL的校验

不可行操作

  • updateById()方法,会默认忽略 为null的note字段
  • 有考虑过修改更新策略(默认配置为“非NULL判断”,需要改成“忽略判断”:
    • 全局更新配置:在这里插入图片描述
    • 单个字段的配置:字段加注解在这里插入图片描述
  • 主要想说放弃修改配置的原因:平时我都是用updateById(),很少用到updateWrapper的。所以一开始觉得,修改策略是一劳永逸。但其实,如果改了配置之后,原本项目里使用updateWrapper方法进行更新的部分就会受到影响:正常来说,会忽略更新为null的字段;修改配置后,就不会忽略了为null的字段,这样会把原来的值误覆盖。

更新方法参考

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值