MyBatis-Plus处理更新操作时的空值问题及解决过程
引言
MyBatis-Plus在执行更新操作时,可能会忽略字段值为空或null的情况,导致这些字段的值没有被更新为数据库中的NULL。
解决方案
方案一:注解方式
使用@TableField 注解的 updateStrategy属性
MyBatis-Plus提供了@TableField注解的updateStrategy属性,允许开发者自定义更新操作时的字段策略。
IGNORED:无论字段值为何,都将其包含在SET语句中。
相当于 update table_a set column=#{column}, 属性为null/空字符串都会被set进去
NOT_NULL:仅当字段值不为null时,才将其包含在SET语句中。
相当于 update table_a set <if test="column != null">column=#{column}</if>`
NOT_EMPTY:仅当字段值不为null且不为空字符串时,才将其包含在SET语句中。
相当于 update table_a set <if test="column != null and
column!=''">column=#{column}</if>
例如,要将字段enddate在更新时设置为NULL,可以使用以下 注解:
@TableField(value = "ENDDATE", updateStrategy = FieldStrategy.IGNORED) private Date enddate;
注意:在MyBatis-Plus
3.1.2版本之后,strategy方法已被弃用,取而代之的是insertStrategy、updateStrategy和whereStrategy。
方案二: 全局配置
update-strategy有三种IGNORED,NOT_NULL,NOT_EMPTY,意思同上
# yml 配置: mybatis-plus: global-config: db-config: update-strategy: IGNORED
方案三:使用 UpdateWrapper (3.x) 更新
mapper.update(
new User().setName("张三").setAge(5),
Wrappers.<User>lambdaUpdate()
.set(User::getEmail, null) //把email设置成null
.eq(User::getId, 5)
);
总结
MyBatis-Plus提供了灵活的注解配置,以处理更新操作中的空值问题。
开发者可以根据具体的业务需求和数据库特性选择合适的方法。
正确处理空值不仅可以提高数据库操作的效率,还可以避免数据不一致的问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot中@ConfigurationProperties自动获取配置参数的流程步骤
当需要获取配置文件中很多参数时,我们可以定义参数的前缀相同,通过自动映射 进行获取配置文件中参数,所以本文给大家介绍了SpringBoot中@ConfigurationProperties自动获取配置参数的流程步骤,需要的朋友可以参考下2024-11-11
Spring Native打包本地镜像的操作方法(无需通过Graal的maven插件buildtools)
这篇文章主要介绍了Spring Native打包本地镜像,无需通过Graal的maven插件buildtools,本文探索一下,如果不通过这个插件来生成镜像,结合实例代码给大家介绍的非常详细,需要的朋友可以参考下2023-02-02
Spring Security中自定义cors配置及原理解析
在Spring框架中,通过自定义CORS配置可根据实际情况调整URL的协议、主机、端口等,以适应"同源安全策略",配置原理涉及CorsConfigurer和CorsFilter,自定义配置需要注意@Configuration注解、方法名以及可能的@Autowired注解2024-10-10
Spring Boot中KafkaListener的介绍、原理和使用方法案例详解
本文介绍了Spring Boot中 @KafkaListener 注解的介绍、原理和使用方法,通过本文的介绍,我们希望读者能够更好地理解Spring Boot中 @KafkaListener 注解的使用方法,并在项目中更加灵活地应用2023-09-09
深入浅析java web log4j 配置及在web项目中配置Log4j的技巧
这篇文章主要介绍了2015-11-11


最新评论