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()
使用方法为:文章来源:https://www.toymoban.com/news/detail-542478.html
this.lambdaUpdate()
.set(对象::get字段名, 需要修改为什么样的值)
.eq(对象::get条件字段名, 条件满足这个值)
.update(new 对象());
// 举个例子
this.lambdaUpdate()
.set(User::getName(), name)
.eq(User::getUserId, userId)
.update(new User());
或者文章来源地址https://www.toymoban.com/news/detail-542478.html
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;
到了这里,关于mybatis-plus使用this.baseMapper.update和updateById更新null值不生效的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!