mybatis-plus更新字段的时候设置为null,忽略实体null判断

本文介绍在使用MyBatis-Plus时如何解决更新字段为NULL的问题,包括不推荐的方法及官方推荐的使用UpdateWrapper的方式,并提供具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 问题

在用mybatis-plus封装的updateById方法来更新数据时,想把一个字段设置为null值,但是发现更新后数据没有为null还是原来的值,这是因为mybatis-plus在更新的时候做了null判断,默认不更新为null的传参。

2 解决方法

1.将这个字段设置为空可以更新

在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断,例如

@TableField(strategy = FieldStrategy.IGNORED)
private String name;

当@TableField注解有多个值时

@TableField(value = "user_name", strategy = FieldStrategy.IGNORED)
private String userName;

附:

2. 我们将全局更新策略设置为空可以更新

这两种方式都是我极力不推荐的,大家也尽量不要使用这两种方法,真的非常危险,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为null 了。

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

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

LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
 
wrapper.set(User::getGender(), null);
 
wrapper.eq(User::getId(), 1);
 
userService.update(wrapper);

通过UpdateWrapper 可以设置null.

官网说明: 

地址: https://mp.baomidou.com/guide/faq.html#%E6%8F%92%E5%85%A5%E6%88%96%E6%9B%B4%E6%96%B0%E7%9A%84%E5%AD%97%E6%AE%B5%E6%9C%89-%E7%A9%BA%E5%AD%97%E7%AC%A6%E4%B8%B2-%E6%88%96%E8%80%85-null

 参考:mybatis-plus更新字段的时候设置为null,忽略实体null判断_mybatis 传参为null 会忽略吗-优快云博客

参考:Mybatis-plus 在不修改全局策略和字段注解的情况下将字段更新为null_mybatis plus 什么情况下会把插入语句的null替换为“”-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值