mybatis-plus使用this.baseMapper.update和updateById更新null值不生效

mybatis-plus 在 serviceImpl 层可以直接使用 this.baseMapper.update 和 updateById ,
如果更新的字段值是null,这时候需更新为 null 的字段更新不成功。打印的 sql 也没有更新为 null 的字段。

原因:

Mybatis-Plus默认的更新策略设置的问题,Mybatis-Plus中FieldStrategy有三种策略:
  IGNORED:忽略。不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null;
  NOT_NULL:非 NULL,默认策略。也就是忽略null的字段,不忽略"";
  NOT_EMPTY:非空。为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库;

解决:
1)当需要设置可能为null的字段,需要用 lambdaUpdate()
使用方法为:

        this.lambdaUpdate()
            .set(对象::get字段名, 需要修改为什么样的值)
            .eq(对象::get条件字段名, 条件满足这个值)
            .update(new 对象());
            
      // 举个例子
            this.lambdaUpdate()
            .set(User::getName(), name)
            .eq(User::getUserId, userId)
            .update(new User());

或者

  sysUserService.update(null, new LambdaUpdateWrapper()
                .eq(SysUser::getUsername,username)
                .set(SysUser::getName,null)
                .set(SysUser::getPassword,null)
        );

  1. 实体类需更新的字段上 加注解
    @TableField(updateStrategy = FieldStrategy.IGNORED)
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;

单个的例子:

@TableField(updateStrategy = FieldStrategy.IGNORED)
private String username;

你可能感兴趣的:(mybatis,java,mysql)