一、问题
在用mybatis-plus封装的updateById方法来更新数据时,想把一个原本有值的字段设置为null ,但是发现更新后数据没有为null 还是原来的值,这是因为mybatis-plus在更新的时候做了null 判断,不更新为null 的传参,这就是默认的空不更新策略。但是又要将某个字段更新为null,所以到底应该如何解决,本文记录了几种解决方法,以及对这几种方法的总结。
二、解决办法
FieldStrategy 有三种策略:
IGNORED:忽略
NOT_NULL:非 NULL,默认策略
NOT_EMPTY:非空
当用户有更新字段为空字符串或者 null 的需求时,需要对 FieldStrategy 策略进行调整
(1)方式一:调整全局的验证策略
注入配置 GlobalConfiguration 属性 fieldStrategy
(2)方式二:调整字段验证注解
根据具体情况,在需要更新的字段中调整验证注解,如:
(3)方式三:使用 UpdateWrapper (3.x)
使用以下方法来进行更新或插入操作:例如想对privilege表中某一id的父节点pid设置为null,这边一开始有个问题是,我把这段代码放在更新接口的靠前位置,因为有其他字段也要更新,所以更新下来,又变回原值,后来移到最后,也就是先设置其他值,这个需要设置空的字段最后更新,这样就防止该字段被覆盖值的情况了。
三、总结
方式一和方式二并不安全,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为null了。更推荐使用方式三。