mybatisPlus 新增时 其他字段的值和 id 保持一致实现方法

MyBatis-Plus 实现 sp_id_path 与 id 同步的方案

要实现新增时 sp_id_path 自动与 id 保持一致,需要在实体类和插入逻辑中做相应处理。MyBatis-Plus 提供了几种方式来实现这一需求:

方案一:使用 MyBatis-Plus 的自动填充功能

这是最优雅的解决方案,通过实现 MetaObjectHandler 接口,在插入前自动设置 sp_id_path 的值:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {// 获取当前实体对象Object entity = metaObject.getOriginalObject();// 只处理 DsteSpConfigNew 实体if (entity instanceof DsteSpConfigNew) {DsteSpConfigNew config = (DsteSpConfigNew) entity;// 若 sp_id_path 未手动设置,则在插入前设置为 id 值if (config.getSpIdPath() == null) {// 注意:此处 id 可能还未生成,需要特殊处理// 下面会提供具体实现方式}}}@Overridepublic void updateFill(MetaObject metaObject) {// 更新填充逻辑}
}

方案二:在插入后更新 sp_id_path

由于 id 是自增主键,插入前无法获取,可分两步实现:

  1. 先插入记录,获取生成的 id
  2. 立即更新 sp_id_path 为该 id
@Service
public class DsteSpConfigNewService {@Autowiredprivate DsteSpConfigNewMapper configMapper;@Transactionalpublic void saveConfig(DsteSpConfigNew config) {// 1. 插入记录,此时会自动生成 idconfigMapper.insert(config);// 2. 获取生成的 idLong id = config.getId();// 3. 更新 sp_id_path 为 id 值DsteSpConfigNew updateEntity = new DsteSpConfigNew();updateEntity.setId(id);updateEntity.setSpIdPath(String.valueOf(id));configMapper.updateById(updateEntity);}
}

方案三:使用数据库触发器(推荐)

数据库层面的触发器可以更可靠地保证 sp_id_path 与 id 的一致性:

DELIMITER $$
CREATE TRIGGER after_dste_sp_config_new_insert
AFTER INSERT ON dste_sp_config_new
FOR EACH ROW
BEGIN-- 将新记录的 sp_id_path 更新为 id 值UPDATE dste_sp_config_new SET sp_id_path = NEW.id WHERE id = NEW.id;
END$$
DELIMITER ;

这种方式无需修改 Java 代码,完全由数据库自动处理,但需要注意触发器可能带来的性能影响。

实体类配置

确保实体类中包含这两个字段,并使用正确的注解:

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("dste_sp_config_new")
public class DsteSpConfigNew {@TableId(type = IdType.AUTO)private Long id;private String spName;private Long projectId;private String spIdPath;private String spNamePath;private Long parentSpId;private Integer spStatus;private LocalDateTime createAt;private LocalDateTime updateAt;private LocalDateTime deleteAt;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/81256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兰亭妙微设计:为生命科技赋予人性化的交互语言

在医疗科技日新月异的今天,卓越的硬件性能唯有匹配恰如其分的交互语言,方能真正发挥价值。作为专注于医疗UI/UX设计的专业团队,兰亭妙微设计(www.lanlanwork.com)始终相信:每一处像素的排布,都应…

Tcping详细使用教程

Tcping详细使用教程 下载地址 https://download.elifulkerson.com/files/tcping/0.39/在windows环境下安装tcping 在以上的下载地中找到exe可执行文件,其中tcping.exe适用于32位Windows系统,tcping64.exe适用于64位Windows操作系统。 其实tcping是个…

springCloud/Alibaba常用中间件之Seata分布式事务

文章目录 SpringCloud Alibaba:依赖版本补充Seata处理分布式事务(AT模式)AT模式介绍核心组件介绍AT的工作流程:两阶段提交(**2PC**) Seata-AT模式使用Seata(2.0.0)下载、配置和启动Seata案例实战前置代码添加全局注解 GlobalTransactional Sp…

COMSOL随机参数化表面流体流动模拟

基于粗糙度表面的裂隙流研究对于理解地下水的流动、污染物传输以及与之相关的地质灾害(如滑坡)等方面具有重要意义。本研究通过蒙特卡洛方法生成随机表面形貌,并利用COMSOL Multiphysics对随机参数化表面的微尺度流体流动进行模拟。 参数化…

初识——QT

QT安装方法 一、项目创建流程 创建项目 入口:通过Qt Creator的欢迎页面或菜单栏(文件→新建项目)创建新项目。 项目类型:选择「Qt Widgets Application」。 路径要求:项目路径需为纯英文且不含特殊字符。 构建系统…

7-15 计算圆周率

π​131​352!​3573!​⋯357⋯(2n1)n!​⋯ 输入格式: 输入在一行中给出小于1的阈值。 输出格式: 在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。 输入样例: 0.01输出样例: 3.132157 我的代码 #i…

【图片识别工具】批量单据识别批量重命名,批量OCR识别图片文字并重命名,批量改名工具的使用步骤和注意事项

一、适用场景 ​​财务与发票管理​​:企业需处理大量电子发票或扫描件,通过OCR识别发票代码、金额等关键信息,自动重命名为发票号_金额.pdf格式,便于归档与税务审计。 ​​物流单据处理​​:物流公司需从运单中提取单…

Modbus TCP转Profinet网关:数字化工厂异构网络融合的核心枢纽

在现代工业生产中,随着智能制造和工业互联网的不断发展,数字化工厂成为了制造业升级的重要方向。数字化工厂的核心在于实现设备、数据和人的互联互通,而这其中,通信协议扮演着至关重要的角色。今天,我们就来探讨开疆智…

win11平台下的docker-desktop中的volume位置问题

因为需要搞个本地的mysql数据库,而且本地安装的程序较多,不想再安mysql了,就想到使用docker来安装。而且因为数据巨大,所以想到直接使用转移data文件夹的方式。 各种查询,而且还使用ai查询,他们都提到&…

【MySQL】项目实践

个人主页:Guiat 归属专栏:MySQL 文章目录 1. 项目实践概述1.1 项目实践的重要性1.2 项目中MySQL的典型应用场景 2. 数据库设计流程2.1 需求分析与规划2.2 设计过程示例2.3 数据库设计工具 3. 电子商务平台实践案例3.1 系统架构3.2 数据库Schema设计3.3 数…

React学习———CSS Modules(样式模块化)

CSS Modules CSS Modules(样式模块化)是一种用于模块化和局部作用域化CSS样式的技术,让CSS只在当前组件内生效,避免全局样式冲突的技术方案 工作原理 文件命名:通常以.module.css、.module.less、.module.scss等结尾…

agent 智能体应用产品:生图、生视频、代码等

生图片 Lovart:全球首个设计 Agent https://www.lovart.ai/ 生视频 AI 视频 Agent 产品:Medeo https://www.medeo.app/ 代码 vscode copilot、cursor、trae 其他research manus grok等各个大模型产品

青少年ctf平台应急响应-应急响应2

题目: 当前服务器被创建了一个新的用户,请提交新用户的用户名,得到的结果 ssh rootchallenge.qsnctf.com -p 30327 这个命令用于通过 SSH 协议连接到指定的远程服务器。具体解释如下: ssh:这是在 Unix-like 系统中…

码蹄集——圆包含

MT1181 圆包含 输入2个圆的圆心的坐标值(x,y)和半径,判断断一个圆是否完全包含另一个圆,输出YES或者NO。另:内切不算做完全包含。 格式 输入格式:输入整型,空格分隔。 每行输入一组…

基于EMD-PCA-LSTM的光伏功率预测模型研究

摘要 本文提出了一种结合经验模态分解(EMD)、主成分分析(PCA)和长短期记忆网络(LSTM)的混合预测模型,用于提高光伏功率预测的准确性。该模型首先利用EMD算法将非平稳的光伏功率序列分解为多个本征模态函数(IMF),然后通过PCA对多维气象特征进行降维处理,最后将处理后的特征输…

MYSQL创建索引的原则

创建索引的原则包括: 表中的数据量超过10万以上时考虑创建索引。 选择查询频繁的字段作为索引,如查询条件、排序字段或分组字段。 尽量使用复合索引,覆盖SQL的返回值。 如果字段区分度不高,可以将其放在组合索引的后面。 对于…

vue+threeJS 大理石贴图

嗨,我是小路。今天主要和大家分享的主题是“vuethreeJS 大理石贴图”。 通过 Vue 3 和 Three.js 实现大理石纹理效果,并将这种技术应用于产品展示、虚拟展览、甚至是互动游戏之中,其潜力无穷。今天主要介绍基础的大理石贴图。 vueth…

依赖倒转原则:Java 架构设计的核心准则

在软件开发的漫长演进历程中,设计原则如同灯塔般指引着工程师构建可维护、可扩展的系统。其中,依赖倒转原则(Dependency Inversion Principle, DIP)作为面向对象设计的五大核心原则之一,深刻影响着系统架构的稳定性与灵…

使用Frp搭建内网穿透,外网也可以访问本地电脑。

一、准备 1、服务器:需要一台外网可以访问的服务器,不在乎配置,宽带好就行。我用的是linux服务器。(一般买一个1核1g的云服务器就行),因为配置高的服务器贵,所以这是个择中办法。 2、客户端&a…

Spyglass:跨时钟域同步(同步使能)

相关阅读 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 简介 同步使能方案主要用于数据信号跨时钟域同步,该方案将一个控制信号同步至目标时钟域并用其作为数据信号的捕获触发器的使能信号,如图1所示…