方案一
使用 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)
);