工作实战总结与实现-mybatis-plus更新策略部分字段不更新问题
文章目录
- 案例场景
- 存在问题
- 解决方案一
- 解决方案二
- 继续延伸

案例场景
很简单的工作场景,需要将数据库某个表的字段设置为null或者空字符串,使用mybatis-plus的update语句,如下:
order.setPassCode(null);reservationOrderManger.updateById(order);
很自然的认为会更新成功,然后bug已经悄然而来,发现并没有更新成功,why??
存在问题
虽然我们的建表语句并没有对该字段进行非空限制,现在仅仅是希望把它更新为null,结果不成功。检查一下JavaBean,乍一看好像也没啥问题,其实Mybatis-Plus有一个更新策略FieldStrategy,默认是DEFAULT,在更新字段的时候,如果字段的值为null,就不会拼接到sql语句中,问题就出在这,因此我们需要手动调整更新策略。
@Data
public class XXXEntity{/*** 门禁通行码.*/@TableField(value = "pass_code")private String passCode;
}CREATE TABLE public.reservation_order (id uuid NOT NULL, -- 主键pass_code varchar(50) NULL, -- 通行码CONSTRAINT reservation_order_pkey PRIMARY KEY (id)
);
解决方案一
public class XXXEntity{/*** 门禁通行码.*/@TableField(value = "pass_code", updateStrategy = FieldStrategy.IGNORED)private String passCode;
}
五大策略
public enum FieldStrategy {// 不管有没有有设置属性,所有的字段都会设置到insert语句中,如果没设置值会更新为null IGNORED,// 也是默认策略,也就是忽略null的字段,不忽略""NOT_NULL,// 为null,为空串的忽略,就是如果设置值为null,“”,不会插入数据库NOT_EMPTY,// 同NOT_NULLDEFAULT,// 一经插入 永不更新 (etc:createTime)NEVER;private FieldStrategy() {}
}
解决方案二
设置全局的field-strategy(默认追随全局配置)
mybatis-plus:globalConfig:dbConfig:update-strategy: ignored
这样做是全局性配置,会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值的时候没有传递过来,就会被更新为null,可能会影响其他业务数据的正确性。
继续延伸
在mybatis-plus中,不仅仅有更新策略,还有插入策略、查询策略,默认也是如果字段值为空不进行插入、查询,当然也可以自定义不同策略
public @interface TableField {String value() default "";boolean exist() default true;String condition() default "";String update() default "";FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;
}// 使用方法
mybatis-plus:globalConfig:dbConfig:logicDeleteValue: "11"logicNotDeleteValue: "1"logicDeleteField: "model_status"update-strategy: ignoredwhere-strategy: ignoredinsert-strategy: ignored// 使用方法
@TableName("reservation_order")
public class XXXEntity {/*** 门禁通行码.*/@TableField(value = "pass_code", updateStrategy = FieldStrategy.IGNORED, insertStrategy = FieldStrategy.IGNORED, whereStrategy = FieldStrategy.IGNORED)private String passCode;
}
相关文章:
工作实战总结与实现-mybatis-plus更新策略部分字段不更新问题
文章目录 案例场景存在问题解决方案一解决方案二继续延伸 案例场景 很简单的工作场景,需要将数据库某个表的字段设置为null或者空字符串,使用mybatis-plus的update语句,如下: order.setPassCode(null);reservationOrderManger.up…...
MFC扩展库BCGControlBar Pro v36.0新版亮点:黑色主题中的自动反转图标
BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.0已全新发布了,这个版本在黑暗主题中添加自动图标反转、新增一个全新的S…...
Midjourney Describe API 的对接和使用
Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …...
《单片机原理及接口技术》(C51编程)(第三版)------张毅刚主编
1.整体框架:1-22题(17-20为编程题分别源自数中的P98,P162,P177页) 2.简答题部分: 3.计算题...
Qt入门9——绘图
基本概念 虽然Qt已经内置了很多的控件,但是不能保证现有控件就可以应对所有场景. 很多时候我们需要更强的"DIY"能力; Qt 提供了画图相关的API,可以允许我们在窗口上绘制任意的图形形状,来完成更复杂的界面设计。 绘图api核心类: 类说明QPaint…...
FreeRTOS之ARM CR5栈结构操作示意图
FreeRTOS之ARM CR5栈结构操作示意图 1 FreeRTOS源码下载地址2 ARM CR5栈结构操作宏和接口2.1 portSAVE_CONTEXT宏2.1.1 portSAVE_CONTEXT源码2.1.2 portSAVE_CONTEXT宏操作栈结构变化示意图 2.2 portRESTORE_CONTEXT宏2.2.1 portRESTORE_CONTEXT源码2.2.2 portRESTORE_CONTEXT宏…...
Java线程的interrupt中断、wait-notify/all(源码级分析)
实例方法: interrupt()方法是设置结束阻塞(sleep、),并且设置中断标记true isInterrupted()判断当前是否中断 静态方法: Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好,既然上面的方法作用是清晰的&…...
计网408考点讲解
IPv4...
当linux可执行文件缺少或者不兼容so库时候,如何查看版本以及缺少那些库
解决方法: ldd 命令来验证程序是否加载了正确的库: 如检查linear_elasticity可执行文件缺少的库,用下面命令: ldd linear_elasticity 可以发现下面not found就是缺少的库,还有对应的库的位置已经版本 $ ldd lin…...
文件下载的几种方式
1、使用window.open方法 url: 可以为文件存放的地址 function downloadFile(url) {window.open(url); }2、使用<a>标签进行文件下载 <a href"/多因素登录说明文档.pdf" class"link-text">说明文档</a> 3、使用fetch和Blob对象 这种…...
车联网安全学习之TBOX
Telematics BOX,简称 T-BOX,也称远程信息处理控制单元(Telematics Control Unit, TCU),集成GPS、外部通信接口、电子处理单元、微控制器、移动通信单元和存储器等功能模块。 TBOX 提供的功能有网络接入、OTA、远程控制…...
访问http网页强制跳转到了https的解决办法
目录 解决浏览器自动从 HTTP 重定向到 HTTPS 的问题问题原因:HSTS(HTTP Strict Transport Security)什么是 HSTS?HSTS 的工作原理 如何解决?1. 清除浏览器的 HSTS 信息在 Chrome 中清除 HSTS 信息:在 Firef…...
3D 生成重建016-SA3D从nerf中分割一切
3D 生成重建016-SA3D从nerf中分割一切 文章目录 0 论文工作1 方法介绍2 实验结果 0 论文工作 1 SAM的背景和目标: SAM 是一种强大的二维视觉基础模型,能够在 2D 图像中进行任意物体的分割。传统上,SAM 在二维空间表现出色,但其无…...
阿里云整理(二)
阿里云整理 1. 访问网站2. 专业名词2.1 域名2.2 域名备案2.3 云解析DNS2.4 CDN2.5 WAF 1. 访问网站 用户使用浏览器访问网站大体分为几个过程: 用户在浏览器输入域名URL,例如www.baidu.com。 不过,浏览器并不知道为该域名提供服务的服务器具…...
qt基本部分控件用法(一)
前言: 以前 windows下做工具主要是MFC,趁有点空时间,研究了QT,感觉跟MFC 差不多,VS 比 QT CREATOR 还是强大,不过QT可以跨平台,功能更强大,MFC 只能在win平台下.; 1:环境…...
【Linux】环境ChatGLM-4-9B 模型之 openai API 服务
一、摘要 最近看到 Function Call 比较感兴趣,它的核心是赋予大模型能够调用外部API的能力,能够解决大模型功能扩展性问题,允许模型调用外部数据库或API,提供特定领域的详细信息;解决信息实时性问题,模型可以实时获取最新数据;解决数据局限性问题,大模型训练数据虽多但…...
Too many open files 问题处理
某个简单的 python 服务,运行一段时间就崩溃。查看日志后发现有一个系统错误 OSError: Errno24 Too many open files要理解这个问题,首先要理解什么是文件描述符,可以参考我的另一篇文章(Linux 系统文件描述符(File Descriptor&a…...
CentOS 7 环境下常见的操作和配置
目录 1. CentOS 7 中的 vsftpd 配置与使用 安装与启动 vsftpd 配置 vsftpd(/etc/vsftpd/vsftpd.conf) 常见命令 2. 使用 yum 包管理器 3. 安全性与防火墙配置 开放端口 4. 使用 systemd 管理服务 5. SELinux 配置 查看 SELinux 状态 临时禁用…...
HTTP(超文本传输协议)
HTTP是万维网通信的基础构成,是一个简单的请求相应协议,基于TCP之上80号端口 通信原理 DNS解析 将域名甩个DNS服务器解析,将域名化为IP访问 建立TCP连接 如图,客户端先发送一个sys置位seq为x(任意值)的…...
etcd-v3.5release-(3)-readIndexRead
笔记1:读操作包括两种,readIndex和serilizable,readIndex指一致性读,一旦a读到了数据x,那么a及a以后的数据都能读到x,readIndex读会先确认本leader是不是有效地leader,如果有效则记录此刻的comm…...
2025年网盘直链下载神器:LinkSwift完全使用指南与深度解析
2025年网盘直链下载神器:LinkSwift完全使用指南与深度解析 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...
从三维点胶机到桌面雕刻机:一个STM32+FPGA运动控制核心板的复用实战
从三维点胶机到桌面雕刻机:STM32FPGA运动控制核心板的复用实战 在工业自动化设备开发领域,运动控制器的复用性与平台化设计正成为工程师们关注的焦点。当我们完成一款基于STM32FPGA架构的运动控制核心板开发后,如何快速将其适配到不同应用场景…...
手把手教你用YOLACT训练自己的数据集:从COCO格式准备到模型推理全流程(附Python源码)
YOLACT实战指南:从数据标注到工业级实例分割模型部署 1. 实例分割技术演进与YOLACT核心优势 在计算机视觉领域,实例分割一直被视为目标检测与语义分割的结合体。不同于简单的边界框检测或像素级分类,实例分割要求算法能够区分同一类别的不同个…...
Python核心技术难点与实战案例解析
Python核心技术难点梳理与实战落地案例解析 一、前言 Python凭借简洁易懂的语法、丰富齐全的第三方库、跨平台运行优势,成为当下后端开发、数据分析、自动化运维、人工智能等领域的主流编程语言。在实际项目开发与学习过程中,多数开发者常会遇到语法细节…...
新手入门教程使用Python快速调用Taotoken提供的多模型API服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手入门教程使用Python快速调用Taotoken提供的多模型API服务 对于刚开始接触大模型API的开发者而言,直接对接不同厂商…...
性能优化实战:在Unity项目里管理多个Video Player,如何避免内存泄漏和卡顿?
Unity多视频管理实战:规避内存泄漏与卡顿的深度优化策略 在沉浸式游戏体验和交互式AR/VR应用中,视频内容已成为提升用户参与度的关键要素。但当场景中同时存在多个Video Player组件时,开发者往往会遭遇突如其来的性能断崖——内存占用飙升、播…...
FPGA资源省一半?揭秘多相滤波器在抽取/内插中的高效实现结构与Xilinx IP核配置要点
FPGA资源优化实战:多相滤波器在采样率转换中的高效架构与Xilinx IP核深度配置 当信号处理系统面临严苛的资源约束时,工程师们常常需要在性能与成本之间走钢丝。多相滤波器结构就像一位精明的财务顾问,能帮你在FPGA资源预算紧张的情况下&#…...
使用 curl 命令直接测试 Taotoken 聊天补全接口连通性与返回
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 curl 命令直接测试 Taotoken 聊天补全接口连通性与返回 在开发或调试过程中,有时你可能需要绕过高级 SDK…...
别再只用if-else了!Matlab里switch/case的5个高效用法与避坑指南
别再只用if-else了!Matlab里switch/case的5个高效用法与避坑指南 在Matlab编程中,if-else语句几乎是每个开发者最先掌握的控制结构之一。但当你开始处理更复杂的条件逻辑时,一长串的if-elseif-else语句不仅让代码变得难以阅读,还可…...
深入解析ACP Bridge:构建高效微服务通信与数据同步的协议转换桥梁
1. 项目概述与核心价值最近在折腾一个跨平台数据同步的项目,遇到了一个挺有意思的组件——allvegetable/acp-bridge。乍一看这个名字,可能会有点摸不着头脑,acp是什么?bridge又在这里扮演什么角色?实际上,这…...
