mybatis-plus 在 serviceImpl 層可以直接使用 this.baseMapper.update 和 updateById ,
如果更新的字段值是null,這時(shí)候需更新為 null 的字段更新不成功。打印的 sql 也沒有更新為 null 的字段。
原因:
Mybatis-Plus默認(rèn)的更新策略設(shè)置的問題,Mybatis-Plus中FieldStrategy有三種策略:
IGNORED:忽略。不管有沒有有設(shè)置屬性,所有的字段都會(huì)設(shè)置到insert語句中,如果沒設(shè)置值會(huì)更新為null;
NOT_NULL:非 NULL,默認(rèn)策略。也就是忽略null的字段,不忽略"";
NOT_EMPTY:非空。為null,為空串的忽略,就是如果設(shè)置值為null,“”,不會(huì)插入數(shù)據(jù)庫;
解決:
1)當(dāng)需要設(shè)置可能為null的字段,需要用 lambdaUpdate()
使用方法為:文章來源:http://www.zghlxwxcb.cn/news/detail-542478.html
this.lambdaUpdate()
.set(對(duì)象::get字段名, 需要修改為什么樣的值)
.eq(對(duì)象::get條件字段名, 條件滿足這個(gè)值)
.update(new 對(duì)象());
// 舉個(gè)例子
this.lambdaUpdate()
.set(User::getName(), name)
.eq(User::getUserId, userId)
.update(new User());
或者文章來源地址http://www.zghlxwxcb.cn/news/detail-542478.html
sysUserService.update(null, new LambdaUpdateWrapper<SysUser>()
.eq(SysUser::getUsername,username)
.set(SysUser::getName,null)
.set(SysUser::getPassword,null)
);
- 實(shí)體類需更新的字段上 加注解
@TableField(updateStrategy = FieldStrategy.IGNORED)
@TableField(insertStrategy = FieldStrategy.IGNORED, updateStrategy = FieldStrategy.IGNORED)
private String name;
單個(gè)的例子:
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String username;
到了這里,關(guān)于mybatis-plus使用this.baseMapper.update和updateById更新null值不生效的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!