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 是类组件中的生命周期方法,它可以让组件在判断是否需要重新渲染时ÿ…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
