问题描述
项目内有自定义的service层和mapper层的updateById方法。
后续有新增字段,懒得去修改xml文件,索性直接调用mybatisplus的updateById方法,发现有的字段明明赋值了,但是并没有对这个字段进行修改,调试发现mp生成的sql并没有对这些字段进行修改。
因为service层有一个自定义的updateById方法,用了super.updateById来调用mp的方法
@Override
public boolean updateById(CustomerBankLimitContract customerBankLimitContract) {
UserInfoCache cacheInfo = CacheDataUtil.getAuthUserInfo();
Preconditions.checkNotNull(cacheInfo);
LocalDateTime now = LocalDateTime.now();
customerBankLimitContract.setUpdateTime(now);
customerBankLimitContract.setUpNo(cacheInfo.getUsrId());
boolean result = super.updateById(customerBankLimitContract);
if (!result) {
throw new FrontBusiException("更新失败,数据不存在或内容输入错误");
}
return result;
}
原因分析:
default boolean updateById(T entity) {
return SqlHelper.retBool(this.getBaseMapper().updateById(entity));
}
查看mp的updateById源码发现,service层的方法本质上还是调用的mapper层的updateById。
项目中mapper层也有一个自定义的updateById方法,此时mp会调用自定义的方法而不是其自带的方法。
由于自定义的方法没有对这些字段去处理,所有这些字段是不会更新的。
解决方案:
在dao层将自定义的updateById方法给注释或者换名字,对应的xml也注释了或者换名字。
或者去自定义方法中补全字段。。。