MyBatis更新时新值为null时,updateById()更新失败问题
MyBatis更新时新值为null时,更新失败
比如,类Rule中有个字段名为String note,备注是可以为空的。
note不为空时
- 更新方法是,只输入要更新的值
- 可以构造或者不构造实体对象
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","rule1").set("note", "cannot ignore");
userMapper.update(null, updateWrapper);note为空时
可行操作:
updateWrapper()方法,把可能为空的字段,如notes,手动设置。
- 而对于一次更新,所有字段都有可能被更新的情况,这次我是用了反射,设置了所有可能被更新的字段
- 因为updateWrapper的方法,会默认忽略未被set的方法
手动写一个sql,在xml文件里。也可以绕开NOT NULL的校验
不可行操作:
- updateById()方法,会默认忽略 为null的note字段
- 有考虑过修改更新策略(默认配置为“非NULL判断”,需要改成“忽略判断”:
全局更新配置:

单个字段的配置:字段加注解

主要想说放弃修改配置的原因:
平时我都是用updateById(),很少用到updateWrapper的。
所以一开始觉得,修改策略是一劳永逸。
但其实,如果改了配置之后,原本项目里使用updateWrapper方法进行更新的部分就会受到影响:正常来说,会忽略更新为null的字段;
修改配置后,就不会忽略了为null的字段,这样会把原来的值误覆盖。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解
这篇文章主要介绍了SpringBoot 实现自定义的 @ConditionalOnXXX 注解,通过示例代码介绍了实现一个自定义的 @Conditional 派生注解,Conditional 派生注解的类如何注入到 spring 容器,需要的朋友可以参考下2022-08-08
深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和区别以及如何应用
po vo bo dto dao 和 pojo 是软件开发中经常使用的一些概念,用于设计和实现对象模型,下面将分别解释这些概念的含义及其在开发中的应用,这篇文章主要给大家介绍了关于Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和区别以及如何应用的相关资料,需要的朋友可以参考下2024-08-08
SpringBoot 使用 FTP 操作文件的过程(删除、上传、下载文件)
这篇文章主要介绍了SpringBoot 使用 FTP 操作文件,主要包括配置ftp服务器,上传、删除、下载文件操作,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下2022-12-12


最新评论