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<SysUser>()
.eq(SysUser::getUsername,username)
.set(SysUser::getName,null)
.set(SysUser::getPassword,null)
);
- 实体类需更新的字段上 加注解 @TableField(updateStrategy = FieldStrategy.IGNORED)
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;
单个的例子:
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String username;
版权归原作者 Little-Arya 所有, 如有侵权,请联系我们删除。