MyBatis-Plus处理更新操作时的空值问题及解决过程

 更新时间:2026年06月04日 15:22:40   作者:dazhong2012  
这篇文章主要介绍了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提供了灵活的注解配置,以处理更新操作中的空值问题。

开发者可以根据具体的业务需求和数据库特性选择合适的方法。

正确处理空值不仅可以提高数据库操作的效率,还可以避免数据不一致的问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 语言和 API 功能。在本文中,我们将重点放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表达式,方法引用,JSR-310的日期和时间,和可重复注释。下面跟着小编一起来看下吧
    2017-03-03
  • Java mybatis 开发自定义插件

    Java mybatis 开发自定义插件

    这篇文章主要介绍了Java mybatis开发自定义插件,MyBatis允许你在映射语句执行过程中的某一点进行拦截调用,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • java swing 实现加载自定义的字体

    java swing 实现加载自定义的字体

    这篇文章主要介绍了java swing 实现加载自定义的字体,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java多线程实现聊天客户端和服务器

    Java多线程实现聊天客户端和服务器

    这篇文章主要为大家详细介绍了Java多线程聊天客户端和服务器实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Springboot中@Async异步,实现异步结果合并统一返回方式

    Springboot中@Async异步,实现异步结果合并统一返回方式

    这篇文章主要介绍了Springboot中@Async异步,实现异步结果合并统一返回方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java 项目中使用递归的小结

    Java 项目中使用递归的小结

    在 Java 中,递归是指在方法的定义中调用自身的过程,递归是基于方法调用栈的原理实现的:当一个方法被调用时,会在调用栈中创建一个对应的栈帧,包含方法的参数、局部变量和返回地址等信息,这篇文章主要介绍了Java 项目中对使用递归的理解分享,需要的朋友可以参考下
    2024-07-07
  • Java Swing组件文件选择器JFileChooser简单用法示例

    Java Swing组件文件选择器JFileChooser简单用法示例

    这篇文章主要介绍了Java Swing组件文件选择器JFileChooser简单用法,结合实例形式分析了Swing组件中的文件选择器JFileChooser的简单使用方法,需要的朋友可以参考下
    2017-11-11
  • mybatis配置文件简介_动力节点Java学院整理

    mybatis配置文件简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了mybatis配置文件简介的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • 基于SpringBoot+AOP实现操作日志记录

    基于SpringBoot+AOP实现操作日志记录

    本文介绍了使用日志记录的实现方法,步骤包括明确记录信息、搭建基础环境、创建操作日志实体类和自定义注解、创建AOP切面,重点在于精准控制需要记录日志的接口,通过自定义注解和使用、切点表达式、环绕通知实现实现日志记录逻辑,需要的朋友可以参考下
    2026-04-04
  • java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径

    java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径

    这篇文章主要介绍了java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径,需要的朋友可以参考下
    2014-04-04

最新评论