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

作者:袖梨 2026-06-06

引言

MyBatis-Plus在执行更新操作时,可能会忽略字段值为空或null的情况,导致这些字段的值没有被更新为数据库中的NULL。

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

解决方案

方案一:注解方式

使用@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提供了灵活的注解配置,以处理更新操作中的空值问题。

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

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

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

您可能感兴趣的文章:
  • MyBatis-plus聚合查询、表关联、条件更新实践
  • 使用Mybatis-plus更新null字段的问题分析及解决过程
  • MyBatis-Plus中的更新操作方式(通过id更新和条件更新)
  • mybatis-plus根据任意字段saveOrUpdateBatch更新插入的方法实现
  • MyBatis-Plus updateById方法更新不了空字符串/null的问题及解决
  • MyBatis-Plus 默认不更新null的4种方法
  • Mybatis-Plus更新操作时遇到的问题及解决方法

相关文章

精彩推荐