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;
附:
- 我们将全局更新策略设置为空可以更新
这两种方式都是我极力不推荐的,大家也尽量不要使用这两种方法,真的非常危险,有可能导致别人在调用更新方法的时候不小心就把你的某些字段置为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.
官网说明: