MyBatis-Plus 更新对象时如何将字段值更新为 null
MyBatis-Plus 是一个 MyBatis 的增强工具,在简化开发、提高效率方面表现非常出色。然而,在使用 MyBatis-Plus 更新对象时,默认情况下是不会将字段值更新为 null
的。这是因为 MyBatis-Plus 使用了非空字段策略(FieldStrategy
),默认配置为 NOT_NULL
,即只更新非空字段。
如果你需要将某些字段的值更新为 null
,有几种方法可以实现。本文将介绍几种常见的方法。
方法一:使用 set
方法手动设置字段为 null
在更新对象时,你可以手动将需要更新为 null
的字段设置为 null
。然后,MyBatis-Plus 会将这些字段包含在更新语句中。
User user = new User();
user.setId(1L);
user.setName(null); // 将 name 字段更新为 null userMapper.updateById(user);
方法二:使用 UpdateWrapper
或 LambdaUpdateWrapper
UpdateWrapper
和 LambdaUpdateWrapper
提供了更灵活的更新条件,你可以使用它们来明确指定哪些字段需要更新为 null
。
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1L) .set("name", null); // 将 name 字段更新为 null userMapper.update(null, updateWrapper);
或者使用 LambdaUpdateWrapper
:
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(User::getId, 1L) .set(User::getName, null); // 将 name 字段更新为 null userMapper.update(null, lambdaUpdateWrapper);
方法三:配置全局策略(不推荐)
虽然可以通过配置全局的 FieldStrategy
为 IGNORED
来允许更新为 null
,但这通常不推荐,因为它会影响所有的更新操作。
在 application.yml
或 application.properties
中配置:
mybatis-plus: global-config: db-config: field-strategy: ignored # 允许字段为 null
或者在 Java 配置类中配置:
@Bean
public MybatisPlusConfig customMybatisPlusConfig() { MybatisPlusConfig config = new MybatisPlusConfig(); GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setDbConfig(new DbConfig().setFieldStrategy(FieldStrategy.IGNORED)); config.setGlobalConfig(globalConfig); return config;
}
注意:这种方法会影响全局的字段策略,可能会导致一些意外的更新行为,因此不推荐使用。
方法四:自定义方法(高级用法)
如果你需要更复杂的更新逻辑,可以自定义 Mapper 方法,并在 XML 文件中编写自定义的 SQL 语句。
@Mapper
public interface UserMapper extends BaseMapper<User> { @Update("UPDATE user SET name = #{name} WHERE id = #{id}") int updateNameById(@Param("id") Long id, @Param("name") String name);
}
然后调用自定义方法:
userMapper.updateNameById(1L, null); // 将 name 字段更新为 null
总结
MyBatis-Plus 提供了多种方法来将字段值更新为 null
,你可以根据具体需求选择合适的方法。手动设置字段为 null
和使用 UpdateWrapper
/LambdaUpdateWrapper
是最常见和推荐的方法。全局配置策略虽然简单,但可能会影响其他更新操作,因此应谨慎使用。自定义方法则提供了更高的灵活性,适用于复杂的更新逻辑。
新时代农民工 (QQ:277718357) 点击关注下方 ↓ 微信公众号:程序进阶之路,了解更多技术知识。
相关文章:
MyBatis-Plus 更新对象时如何将字段值更新为 null
MyBatis-Plus 是一个 MyBatis 的增强工具,在简化开发、提高效率方面表现非常出色。然而,在使用 MyBatis-Plus 更新对象时,默认情况下是不会将字段值更新为 null 的。这是因为 MyBatis-Plus 使用了非空字段策略(FieldStrategy&…...

Unreal5从入门到精通之如何在VR中使用3DUI
文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…...

ViSual studio如何安装 并使用GeographicLib
在C的 Boost.Geometry、GDAL/OGR 和 GeographicLib。这些库都可以用于计算两个经纬度点之间的地面距离。 . Boost.Geometry 描述:Boost库的一部分,提供了几何计算功能,包括计算两点之间的地面距离。 优势:轻量级、易于集成到C项…...
Java程序设计:spring boot(11)——分布式缓存 Ehcache 整合
目录 1 Spring Cache 相关注解说明 1.1 CacheConfig 1.2 Cacheable 1.3 CachePut 1.4 CacheEvict 1.5 Caching 2 环境配置 2.1 pom.xml 依赖添加 2.2 ehcahe.xml ⽂件添加 2.3 application.yml 缓存配置 2.4 启动缓存 2.5 JavaBean 对象实现序列化 3 缓存实现 3.…...

豆包,攻克数字是个什么工具?《GKData-挖掘数据的无限可能》(数据爬虫采集工具)
豆包,攻克数字是个什么工具? “攻克数字” 指的是 “攻克数字(GKData)” 这样一款工具。是一款针对网页、APP中数据自动解析转表存入数据库的软件,为数据工作者而生。它是一个不会编程也能用的可视化数据解析为标准二…...
说一说QWidget
目录 关于QWidget 作为界面组件时,你需要有印象的 1. 控制属性 2. 组件状态与交互属性 3. 外观和样式属性 4. 布局与子组件管理属性 5. 图标和光标属性 6. 大小策略属性 作为单独的窗体的属性 写Qt快两年了,也写过一些规模偏大的软件,…...
Web3.0技术入门
Web3.0技术入门是一个涉及多个方面和领域的复杂过程,以下是一些关键的步骤和要点,帮助您初步了解并掌握Web3.0技术。 一、了解Web3.0的基本概念 Web3.0也被称为下一代互联网,它是对当前互联网(Web2.0)的演进和升级。…...

spygalss cdc 检测的bug(二)
当allow_qualifier_merge设置为strict的时候,sg是要检查门的极性的。 如果qualifier和src经过与门汇聚,在同另一个src1信号或门汇聚,sg是报unsync的。 假设当qualifier为0时,0&&src||src1src1,src1无法被gat…...
集合论(ZFC)之 选择公理(Axiom of Choice)注解
直观感受(Intuition) 集合论(ZFC)中的 "C" 指的是选择公理(Axiom of Choice)中的"choice"。简单来说,对于任一非空集合 S,那么存在一个函数 f,选择出…...
JS:字符串操作
目录 1、 字符串分割 1、 字符串分割 var str "123,456,789"; console.log(str.split(,)); // ["123", "456", "789"]...

.NET 一款二进制文件转换Shellcode的工具
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...

【CSS】——基础入门常见操作
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:CSS引入 二:CSS对元素进行美化 1:style修饰 2:选…...
LuaJIT源码分析(五)词法分析
LuaJIT源码分析(五)词法分析 lua虽然是脚本语言,但在执行时,还是先将脚本编译成字节码,然后再由虚拟机解释执行。在编译脚本时,首先需要对源代码进行词法分析,把源代码分解为token流。lua的toke…...
005 匿名信
005 匿名信 题目描述 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字剪下来,剪拼成一封匿名信。现在有一名举报人,希望借鉴这种方式,使用英文报刊完成举报操…...

聊聊Web3D 发展趋势
随着 Web 技术的不断演进,Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来,由于 WebGL、WebGPU 等技术的发展,3D 内容已经能够直接在浏览器中渲染,为用户提供更加沉浸、互动的体验。以…...
【数据结构与算法】LeetCode: 贪心算法
文章目录 LeetCode: 贪心算法买卖股票的最佳时机 (Hot100)买卖股票的最佳时机 II跳跃游戏 (Hot100)跳跃游戏 II(Hot100)划分字母区间 (Hot100)分发饼干K次取反后最大化的…...

Date 日期类的实现(c++)
本文用c实现日期类 将会实现以下函数 bool operator<(const Date& d);bool operator<(const Date& d);bool operator>(const Date& d);bool operator>(const Date& d);bool operator(const Date& d);bool operator!(const Date& d);Date&…...

智能家居10G雷达感应开关模块,飞睿智能uA级别低功耗、超高灵敏度,瞬间响应快
在当今科技飞速发展的时代,智能家居已经逐渐成为人们生活中不可或缺的一部分。从智能灯光控制到智能家电的联动,每一个细节都在为我们的生活带来便利和舒适。而在众多智能家居产品中,10G 雷达感应开关模块以其独特的优势,正逐渐成…...

头歌——人工智能(机器学习 --- 决策树2)
文章目录 第5关:基尼系数代码 第6关:预剪枝与后剪枝代码 第7关:鸢尾花识别代码 第5关:基尼系数 基尼系数 在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择。在C4.5算法中,采用了信息增益率…...
一七一、React性能优化方式
在 React 中进行性能优化可以通过多种手段来减少渲染次数、优化渲染效率并减少内存消耗。以下是常见的性能优化方法及示例: 1. shouldComponentUpdate shouldComponentUpdate 是类组件中的生命周期方法,它可以让组件在判断是否需要重新渲染时ÿ…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...