0
点赞
收藏
分享

微信扫一扫

Mybatis-plus 在不修改全局策略和字段注解的情况下将字段更新为null

 

插入或更新的字段有 空字符串 或者 null

FieldStrategy 有三种策略:

  • IGNORED:忽略
  • NOT_NULL:非 NULL,默认策略
  • NOT_EMPTY:非空

当用户有更新字段为 空字符串 或者 ​​null​​​ 的需求时,需要对 ​​FieldStrategy​​ 策略进行调整:

 

方式一:调整全局的验证策略

注入配置 GlobalConfiguration 属性 fieldStrategy

 

application.yml

mybatis-plus:
global-config:
# 字段策略 0:忽略判断,直接拼SQL, 1:非NULL, 2:非空,3:默认;4:永远不加入SQL
field-strategy: 0

注意

这是全局配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。 

所以,尽量不要用此法。

方式二:调整字段验证注解

根据具体情况,在需要更新的字段中调整验证注解,如验证非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

默认的字段策略会忽略掉,所以我们可以将要设置为null 的字段的策略更改下.例如;

@TableField(strategy = FieldStrategy.IGNORED)
private LocalDateTime offlineTime;

这样再次调用updateById,就ok了
由于做了这个更改,可能后续会有其他人误操作此表的时候,真的将这个字段不知情的情况下置为了null,可能造成严重事故!!!

 

方式三:使用 ​​UpdateWrapper​​ (3.x)

使用以下方法来进行更新或插入操作:

LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(User::getOfflineTime,null); // 设置null
updateWrapper.set(User::getContent,null); // 设置null
updateWrapper.eq(User::getId,article.getId()); // 必须设置id,否则所有的数据都会被修改
userMapper.update(user, updateWrapper);

或者

userService.lambdaUpdate()
.eq(User::getId, user.getId())
.set(User::getUserName, user.getUserName())
.set(User::getNickName, null)
.update();

 

 例子:根据Id主键更新User这个对象,其中email由前端传参,如果不传、空字符串或者传null,则更新该字段为null;

// 插入或更新的字段有 空字符串 或者 null
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
// 设置更新的记录id,缺少这个会更新所有记录
wrapper.eq(User::getId, User.getId());
// 更新时字段值不传、为空字符串、为null可以更新
wrapper.set(User::getEmail, user.getEmail());
update(user,wrapper);

注:需要设置更新记录的id,否则会更新全部的记录;

 

举报

相关推荐

0 条评论