MyBatis-Plus - 字段更新 null 值解决方案

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis-Plus - 字段更新 null 值解决方案相关的知识,希望对你有一定的参考价值。

我们这次来讲一下,怎么样通过mp将数据库中的一个字段更新为null。可能很多人会觉得奇怪,更新为null,直接 set field = null 不就可以了。这里大家要注意一下,一般情况,我们在使用mp的时候,他的默认策略是空不更新, 这个也是非常主流和常见的一种设置。 为什么这么说呢, 比如我们将一个 user 表中的 del_flag 设置为1,一般情况我们只需这么做就行:

User user = new User();

user.setId(1);

user.setDelFlag(1);

userService.update(user);

这个时候,其实其他的字段都是空,如果他的策略是空更新,那么执行之后,表里就只有 id 和del_flag 有值,其余的字段都是Null,很明显这不是我们想要的结果,这就是默认的空不更新策略。

这个时候就出现了一个痛点,必须我是需要把表中的某个字段更新为空,那应该怎么做的? 一是我们将全局更新策略设置为空可以更新,二是将这个字段设置为空可以更新。这两种方式都是我极力不推荐的,大家也尽量不要使用这两种方法,真的非常危险,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为 null 了。

这里推荐一种方法,也是官网给出的,但是必须要求 mp 的版本大于3, 如果是 3 以下的版本没有这个功能,就是使用UpdateWrapper

比如,我们想把  user表中的gender设置为空:

LambdaUpadateWrapper<User> wrapper = new LambdaUpdateWrapper<>();

wrapper.set(User::getGender(), null);

wrapper.eq(User::getId(), 1);

userService.update(wrapper);

通过 UpdateWrapper 可以设置 null

官网说明

以上是关于MyBatis-Plus - 字段更新 null 值解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis-Plus将字段设置为null

MyBatis-Plus使用学习

Mybatis-plusupdateById()方法不能更新字段为null的原因及解决办法

解决 MyBatis-Plus 更新对象无法设空值

解决 MyBatis-Plus 更新对象无法设空值

Mybatis-plus 自动注入公共字段