MyBatis-plus更新对象时将字段值更新为null

时间:2024-01-22 19:33:21

mybatis-plus在执行更新操作,当更新字段为 空字符串 或者 null 的则不会执行更新。如果要将指定字段更新null,可以通过以下三种方式实现。

1、全局配置

        可以在 application.yml 配置文件中注入配置 GlobalConfiguration 属性 update-strategy,
将 update-strategy 策略调整为 IGNORED,即忽略判断策略。即可调整全局的验证策略。

# yml 配置:
mybatis-plus:
  global-config:
    db-config:
      update-strategy: IGNORED

2、添加updateStrategy 注解

        在实体类中将需要更新为null的字段上添加updateStrategy 注解,并将更新策略设置为IGNORED。

@TableField(value = "name", updateStrategy=FieldStrategy.IGNORED)
private String name;

缺点:当在其它接口更新别的字段时,本来没有想更新这个字段,但是也会把这个字段更新为null。

3、使用UpdateWrapper更新

        通过baseMapper的UpdateWrapper将实体类的指定字段set为null。

	 LambdaUpdateWrapper<User> updateWrapper = Wrappers.lambdaUpdate();
	 if (StringUtils.isEmpty(phone)) {
	 		// 这个值为null,才set,不然sql里面会两次赋值,执行sql时报错
	 		updateWrapper.set(User::getPhone, null);
	 }
	 updateWrapper.eq(UserEntity::getUserId, "1");
	 User entity = new User();
	 entity.setName("张三");
	 entity.setAge(null);
	 userMapper.update(null, updateWrapper);