Mybatis-Plus不能更新对象字段为空值问题解决
问题描述:
在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的,而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况,该如何解决呢?
原因分析:
Mybatis-Plus中字段的更新策略是通过FieldStrategy属性控制的。在实体字段上,如果不通过@TableField注解指定字段的更新策略,字段默认的更新策略是FieldStrategy.DEFAULT,即跟随全局策略。而Mybatis-Plus的全局配置中,字段的默认更新策略是FieldStrategy.NOT_NULL,即进行空值判断,不对NULL值数据进行处理。
public DbConfig() {this.idType = IdType.ASSIGN_ID;this.tableUnderline = true;this.capitalMode = false;this.logicDeleteValue = "1";this.logicNotDeleteValue = "0";this.insertStrategy = FieldStrategy.NOT_NULL;this.updateStrategy = FieldStrategy.NOT_NULL;this.whereStrategy = FieldStrategy.NOT_NULL;
}
解决方案:
1、设置字段级别的更新策略IGNORED
如果只需要实体中的几个字段支持空值更新,则通过@TableField注解指定字段的更新策略为FieldStrategy.IGNORED,忽略空值判断,直接更新即可。
该方式的控制级别是字段级别的控制。
示例:
@TableName(value ="user")
@Data
public class User implements Serializable {@TableId(value = "id",type = IdType.ASSIGN_ID)private Long id;private String name;private Integer age;@TableField(updateStrategy = FieldStrategy.IGNORED)private String email;
}

2、设置全局更新策略IGNORED
如果需要全局所有实体的更新操作都需要支持空值更新,可以修改Mybatis-Plus的全局更新策略。
该方式的控制级别是项目级别的控制。
在spring boot中修改如下属性即可:
mybatis-plus.global-config.db-config.update-strategy=ignored
3、采用alwaysUpdateSomeColumnById方法进行全字段更新
Mybatis-Plus中自带的扩展方法alwaysUpdateSomeColumnById会忽略字段的更新策略,直接对实体中的每一个字段都执行更新操作。
如果你不想修改全局的字段更新策略,又需要项目中某个实体的所有字段都支持空值更新,推荐采用该方法。
该方式的控制级别是实体级别的控制。
实现步骤:
- 继承
DefaultSqlInjector扩展sql注入器,注入AlwaysUpdateSomeColumnById方法
public class MySqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {List<AbstractMethod> methodList = super.getMethodList(mapperClass,tableInfo);//自动填充策略为更新填充策略时,不用插入值methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));//自动填充策略为插入时自动填充时,字段不用更新methodList.add(new AlwaysUpdateSomeColumnById(i -> i.getFieldFill() != FieldFill.INSERT));return methodList;}
}
- 将扩展的sql注入器配置到spring容器中
@Configuration
public class MybatisPlusConfig {@Beanpublic MySqlInjector sqlInjector() {return new MySqlInjector();}
}
- 扩展自己的通用Mapper接口CommonMapper
public interface CommonMapper<T> extends BaseMapper<T> {/*** 全量插入,等价于insert* @param entityList* @return*/int insertBatchSomeColumn(List<T> entityList);/*** 全字段更新,不会忽略null值* @param entity* @return*/int alwaysUpdateSomeColumnById(@Param("et") T entity);
}
- UserMapper继承自定义的CommonMapper
public interface UserMapper extends CommonMapper<User> {}
- 实体User
@TableName(value ="user")
@Data
public class User implements Serializable {@TableId(value = "id",type = IdType.ASSIGN_ID)private Long id;private String name;private Integer age;private String email;
}
相关文章:
Mybatis-Plus不能更新对象字段为空值问题解决
问题描述: 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的,而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况,该如何解决呢? 原因分析: Mybatis-Plus中字…...
d3dx9_43.dll丢失怎么解决
d3dx9_43.dll丢失的影响 当我们在运行某些需要DirectX 9支持的程序时,如果系统中缺少d3dx9_43.dll文件,就会出现错误提示,导致程序无法正常启动。这个错误提示通常会类似于“找不到d3dx9_43.dll”或“d3dx9_43.dll不存在”。 打开电脑浏览器…...
【花雕】全国青少年机器人技术一级考试备考实操搭建手册8
随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…...
【UE5 Cesium】09-Cesium for Unreal 子关卡应用实例(下)
效果 通过按钮点击事件实现子关卡的切换 步骤 新建两个Actor蓝图作为GeoMarker,分别命名为“BP_GeoMarker_BeiJing”、“BP_GeoMarker_ShangHai” 分别打开这两个蓝图,添加文本渲染组件 在指定的地理位置上拖入蓝图“BP_GeoMarker_BeiJing” 控制“BP_…...
插值应用案例2
案例1 高点和高程 在一丘陵地带测量高程,x和y方向每隔100m测一个点,得到高程如下表所列,试插值一曲面,确定合适的模型,并由此测到最高点和相应的高程。 x0/z0\y0 100 200 300 400 500 100 636 697 624 478 …...
【新星计划Linux】——常用命令(1)
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…...
python应用-excel和数据库的读取及写入操作
近日完成一个交办任务,从excel表读取数据,根据ID在数据库表匹配相应的记录,并回填至excel表里。我使用的工具是python。下面记录下相应的模块。 一、从excel表读取数据 import pandas as pd import numpy as npdef read_excel():path &quo…...
MySQL Optimization Learning(一)
目录 一、MySQL性能监控 1、show profile 2、performance schema 2.1、MYSQL performance schema详解 3、show processlist 一、MySQL性能监控 MySQL官网 拖到首页最下方找到 MySQL Reference Manual ->cmd命令行 C:\Users\Administrator>mysql -uroot -proot …...
Flink消费kafka出现空指针异常
文章目录 出现场景:表现:问题:解决: tombstone : Kafka中提供了一个墓碑消息(tombstone)的概念,如果一条消息的key不为null,但是其value为null,那么此消息就是墓碑消息. …...
【探索 Kubernetes|作业管理篇 系列 9】Pod 的服务对象
前言 大家好,我是秋意零。 在上一篇中,我们介绍了 Pod 的生命周期以及区分 Pod 字段的层次级别,相信你对此有了充分的认识。 今天,我们还会接着以 Pod 展开,说说它的 “服务对象”,一听就知道是对 Pod 提…...
多种拖拽= =自用留档
<template> <div class"main-drag"> <div v-if"stencil 0" class"mapped-fields"> <el-form ref"mapped" :model"mapped" class"demo-fieldsForm"> <el-form-item label"切换数…...
贝叶斯与认知——读《贝叶斯的博弈》有感
关于对贝叶斯与认知问题的相关思考 一、贝叶斯定理二、贝叶斯与认知的本质三、经验的偏见四、总结 自古以来,人们就在思考知识来自何处,“冯翼惟象,何以识之?”,对此的思考逐渐发展成哲学的认识论分支。德国哲学家康德…...
MySQL安装失败starting the sever
MySQL安装失败starting the sever 如果电脑是第一次安装MySQL,一般不会出现这样的报错。starting the sever失败,通常是因为上次安装该软件没有清除干净。 第一种解决方法:完全卸载mysql,重新安装 完全卸载该软件的办法&#…...
合并文件夹中所有文件,并输出重复的条形码值
文章目录 一、需求二、处理方式三、代码实现 一、需求 每天会生成一个记录文件(文件名按日期yyyyMMdd格式命名),记录文件中记录有条形码的内容,需要合并最近20次的数据,并提取出有重复的条形码。 也可以进行最近30天数…...
P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷
P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷 洛谷题目传送门 文章目录 P3089 [USACO13NOV] Pogo-Cow S 弹簧踩高跷题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题目大意方法一(线段树维护dp)code 方法二 (单调队列维护dp&…...
计算机网络 - 第一章(下)
1.2_1 分层结构、协议、接口、服务_哔哩哔哩_bilibili1.2_1 分层结构、协议、接口、服务是王道计算机考研 计算机网络的第7集视频,该合集共计76集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78…...
【Uniapp】小程序携带Token请求接口+无感知登录方案2.0
本次改进原文《【Uniapp】小程序携带Token请求接口无感知登录方案》,在实际使用过程中我发现以下bug: 若token恰好在用户访问接口时到期,就会直接查询为空,不反映token过期问题(例如:弹窗显示订单查询记录…...
Ubuntu常用命令
文章目录 1:文件管理2:文档编辑3:系统管理4:磁盘管理5:文件传输6:网络通讯7:设备管理8:备份压缩9:其他命令扩展:知识干货 1:文件管理 ls命令 –…...
ERP重构-SLA子分类账-分布式实现方案
背景 ERP中的GL总账模块,明细数据来源于各个业务模块如库存、成本、应收、应付、费控、资产等,统称为子模块,生成的账叫做子分类账。然而记账的业务逻辑各式各样,但是最终输出都是来源、类型、期间、科目、借贷金额等等关键信息。…...
IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)
文章目录 1、路由分类2、RIP协议1)RIP的工作原理2)RIP路由表的更新过程3)RIP路由表的更新原则4)RIP的特性5)RIP协议的版本 4、IGRP协议1)IGRP路由表的更新2)IGRP的度量标准 5、OSPF协议1&#x…...
Qwen2-VL-2B-Instruct环境配置详解:Anaconda虚拟环境管理与依赖冲突解决
Qwen2-VL-2B-Instruct环境配置详解:Anaconda虚拟环境管理与依赖冲突解决 每次准备跑一个新的大模型,最头疼的往往不是模型本身,而是环境配置。特别是像Qwen2-VL-2B-Instruct这种多模态模型,它需要PyTorch、Transformers、CUDA&am…...
除了CAN总线,UDS协议还能跑在哪些车上?手把手带你用Wireshark抓包分析
突破CAN总线限制:UDS协议在多种车载网络中的实战解析 当提到UDS(Unified Diagnostic Services)诊断协议时,大多数工程师的第一反应是它与CAN总线的紧密关联。确实,在传统汽车电子架构中,UDS over CAN是最常…...
告别繁琐权限,uTools hosts插件一键切换与管理的效率革命
1. 为什么我们需要更优雅的hosts管理方案 每次修改hosts文件都要经历这样的痛苦循环:先要回忆文件藏在系统哪个角落,接着得用管理员身份打开文本编辑器,小心翼翼地修改内容,最后还要担心格式错误导致系统异常。作为经常需要切换开…...
RMBG-2.0隐私安全优势解析:纯本地推理杜绝图片上传与数据泄露风险
RMBG-2.0隐私安全优势解析:纯本地推理杜绝图片上传与数据泄露风险 在数字时代,图片处理已经成为日常工作和创作的重要组成部分,但随之而来的隐私安全问题也日益凸显。许多在线抠图工具需要用户上传图片到云端服务器进行处理,这不…...
当电力系统遇上MATLAB:手把手玩转SVC设计
基于MATLAB的静止无功补偿系统设计 本设计包括设计报告,仿真工程。 静止无功补偿系统(Static Var Compensator,简称SVC)是一种用于电力系统中动态调节无功功率的装置,主要由以下几个核心组件构成:晶闸管控制…...
大麦抢票自动化终极指南:5分钟快速上手教程
大麦抢票自动化终极指南:5分钟快速上手教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 您是否曾因热门演唱会门票秒光而遗憾&#x…...
StructBERT情感分类实操手册:自定义示例文本添加方法
StructBERT情感分类实操手册:自定义示例文本添加方法 1. 引言:为什么需要自定义示例? 当你第一次打开StructBERT情感分类的Web界面,可能会觉得它已经内置了不少例子,用起来挺方便。但用着用着,你就会发现…...
解锁旧Mac新生命:技术伙伴如何突破苹果限制
解锁旧Mac新生命:技术伙伴如何突破苹果限制 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否曾想过,那些被苹果官方"抛弃"的老旧Ma…...
二手破损手机涨价,业余 NAS 玩家如何破局?
最近打开手机回收 App,发现家里那台屏幕碎成渣、开不了机的旧安卓机,居然能卖一百多,甚至两三百。你可能会想:这是天上掉馅饼,还是 NAS 玩家的“矿难”前兆? 作为一名业余 NAS 玩家,我正好踩在这…...
OpenClaw调试技巧:百川2-13B任务失败时的日志分析与修复
OpenClaw调试技巧:百川2-13B任务失败时的日志分析与修复 1. 当自动化任务突然罢工时 上周三凌晨2点,我的OpenClaw突然停止了工作——这个本该在深夜自动整理会议纪要并归档的助手,悄无声息地宕机了。监控屏幕显示它卡在"正在调用百川2…...
