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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81256.shtml
英文地址,請注明出處:http://en.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所示…