插入或更新的字段有 空字符串 或者 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,否则会更新全部的记录;
浙公网安备 33010602011771号