news 2026/5/1 9:07:15

MyBatis-Plus 默认不更新 null?这 4 种方法帮你搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis-Plus 默认不更新 null?这 4 种方法帮你搞定

MyBatis-Plus里,更新null字段是一个非常常见、也非常容易踩坑的问题。
很多人会遇到这种情况:

我明明setXxx(null)了,为什么数据库里还是原来的值?

下面我按原因 → 解决方案 → 使用建议来整理一下。


一、为什么 MyBatis-Plus 默认不更新 null?

这是MyBatis-Plus 的设计行为,不是 bug。

默认情况下:

@TableField(updateStrategy = FieldStrategy.NOT_NULL)

也就是说:

字段为null,就不会出现在 UPDATE 语句里

目的是为了:

  • • 防止误操作把字段更新成null

  • • 更符合大多数“只更新有值字段”的业务场景

所以你写:

User user = new User(); user.setId(1L); user.setEmail(null); userMapper.updateById(user);

实际生成的 SQL 类似:

UPDATE user SET id = ? WHERE id = ?

email根本没参与更新。


二、更新 null 的几种正确方式(重点)

方式一:使用@TableField(updateStrategy = FieldStrategy.IGNORED)最推荐

@TableField(updateStrategy = FieldStrategy.IGNORED) private String email;

含义是:

不管是不是 null,都参与 update

这时:

user.setEmail(null); userMapper.updateById(user);

生成 SQL:

UPDATE user SET email = NULL WHERE id = ?

适合场景

  • • 这个字段本来就允许被清空

  • • 例如:备注、头像、手机号、邮箱


方式二:在实体类级别统一策略

@TableName(value = "user", autoResultMap = true) public class User { }

配合全局配置(不太常用,可以了解):

mybatis-plus: global-config: db-config: update-strategy: ignored

慎用

  • • 会导致所有字段都能被更新为 null

  • • 风险较大,不适合复杂业务


方式三:使用UpdateWrapper(最灵活)

如果你不想改实体类:

UpdateWrapper<User> wrapper = new UpdateWrapper<>(); wrapper.eq("id", 1L) .set("email", null); userMapper.update(null, wrapper);

生成 SQL:

UPDATE user SET email = NULL WHERE id = ?

适合场景

  • • 后台管理

  • • 批量操作

  • • 精准控制 SQL


方式四:使用LambdaUpdateWrapper

LambdaUpdateWrapper<User> wrapper = Wrappers.lambdaUpdate(); wrapper.eq(User::getId, 1L) .set(User::getEmail, null); userMapper.update(null, wrapper);

类型安全、IDE 友好,实际项目更推荐

三、一个容易忽略的坑

逻辑删除字段 + 更新 null

如果你用了:

@TableLogic private Integer deleted;

一定要确认:

  • Wrapper里有没有被逻辑删除条件影响

  • • 有些更新失败,其实是被逻辑删除过滤了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:26:08

磁珠机远程监控物联网系统解决方案

磁珠机作为电子元件加工领域的重要设备&#xff0c;实现了三极管切脚成型、点胶、套磁珠及自动摆料的连贯加工&#xff0c;是保障生产安全高效的关键工艺装备。传统模式下&#xff0c;磁珠机多采用独立运行、人工记录的操作方式&#xff0c;设备工艺参数、运行状态、故障信息等…

作者头像 李华
网站建设 2026/5/1 6:27:51

STM32单片机车载CAN总线通信系统159(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32单片机车载CAN总线通信系统159(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 车载CAN总线采集测速板(简称CAN采集板)&#xff1a;由STM32F103C8T6单片机核心板、TJA1050 CAN控制器电路、电机驱…

作者头像 李华
网站建设 2026/4/30 8:18:19

基于51/STM32单片机交流直流电压电流电表功率电量过载抄表无线设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

02-电表 基于51/STM32单片机交流直流电压电流电表功率电量过载抄表无线设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码直流电压直流电流AD转换LCD1602液晶C51-62 交流电压电流功率过载保护AD转换报警液晶C51-86N 蓝牙无线…

作者头像 李华
网站建设 2026/5/1 6:28:27

AI一周重要会议和活动概览(1.19-1.25)

一、【会议通知】第40届AAAI人工智能国际会议将于2026年1月20日至27日在新加坡博览中心举行AAAI人工智能会议&#xff08;AAAI Conference on Artificial Intelligence&#xff09;由人工智能促进会&#xff08;AAAI&#xff09;主办&#xff0c;是人工智能领域中历史最悠久、涵…

作者头像 李华