Mybatis-Plus更新对象时字段更新为空值的问题

565 阅读1分钟

方案一

使用 UpdateWrapper (3.x) 更新

mp 提供了 UpdateWrapper 类简化更新的操作, 针对方法级进行操作,只需操作其更新方法,相比较方案一和方案二,方案三影响范围较小。

由于 BaseMapper 的继承 Mapper ,在 BaseMapper 的源码中写道:

/**
 * 根据 whereEntity 条件,更新记录
 *
 * @param entity        实体对象 (set 条件值,可以为 null)
 * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

1、将需要更新的字段,设置到 entity 中

mapper.update(
   new User().setName("mp").setAge(3),
   Wrappers.<User>lambdaUpdate()
           .set(User::getEmail, null) //把email设置成null
           .eq(User::getId, 2)
);

2、将 entity设置为 null ,将需要更新的字段设置到 UpdateWrapper 中

mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把email设置成null
       .eq(User::getId, 2)
);