搜尋
首頁Javajava教程使用 RC 在 Spring WebFlux 中實現軟刪除

Implementing Soft Delete in Spring WebFlux with RC

資料管理是軟體開發中的基本組成部分,特別是在處理需要從活躍使用中刪除的記錄時。許多應用程式使用稱為「軟刪除」的技術,而不是永久刪除記錄(稱為「硬刪除」的方法)。 「軟刪除」方法是一種廣泛使用的解決方案,可將記錄標記為非活動狀態而不永久刪除它們,從而輕鬆實現資料復原和歷史追蹤。

目前,與 Spring Data JPA 和 Hibernate 不同,Spring Data R2DBC 不提供用於自動處理軟刪除的內建註解。因此,開發人員求助於使用自訂儲存庫實作或查詢來實現類似的功能。

在本文中,我們將研究軟刪除、其優點以及如何使用 R2DBC 在 Spring WebFlux 應用程式中實現它。

什麼是軟刪除

軟刪除是一種資料管理方法,其中記錄被標記為不活動或“已刪除”,而不從資料庫中刪除。通常,這涉及向實體添加一個字段,例如deleted(布爾值)或deletedDate(時間戳記),以指示記錄不再活動。軟刪除不是永久刪除數據,而是將記錄標記為邏輯刪除,將其隱藏在標準查詢中,同時保留它以供潛在的恢復或審核。

軟刪除的好處

  1. 資料恢復:軟刪除可以輕鬆恢復資料。如果一筆記錄被意外刪除,可以透過重置標誌來快速“恢復刪除”,確保資料不會永久遺失。
  2. 歷史資料:軟刪除提供稽核追蹤。組織通常需要保留歷史資料以實現合規性或報告目的,而軟刪除可以在不擁擠活動資料的情況下實現這一點。
  3. 資料完整性:在關係複雜的系統中,永久刪除記錄可能會導致連結損壞和資料不一致。軟刪除透過保持相關資料完整,同時將刪除的記錄標記為非活動來解決這個問題。
  4. 安全性和合規性:法規通常要求將資料保留特定期限。軟刪除使開發人員能夠滿足這些合規性需求,而無需向普通用戶提供資料。

如何使用 Spring Reactive 和 R2DBC 實現軟刪除

如果您有興趣自己實現這一點,我準備了一個入門程式碼 - 一個帶有基本 CRUD 端點和單元測試案例的簡單部落格應用程式。您可以使用此連結從我的 GitHub 儲存庫存取起始程式碼。那麼,讓我們開始吧。

步驟 1:新增欄位以將記錄標記為已刪除

要實現此目的,請在實體類別中新增一個欄位來表示刪除狀態。更有效的方法是建立一個抽象類別 (AbstractSoftDeletableEntity),在其中定義刪除狀態字段,並讓實體類別擴展此抽象類別。此欄位可以是指示記錄是否已刪除的布林值(已刪除),也可以是指示刪除時間的時間戳記(deletedDate)。我建議使用時間戳,因為它提供了刪除發生時間的附加詳細資訊:

第二步:修改實體類,擴展抽象類

修改實體類別以擴展 AbstractSoftDeletableEntity

建立一定程度的抽象和關注點分離,從而遵守物件導向設計的單一職責原則。

步驟 3:建立擴充 SimpleR2dbcRepository 的通用自訂儲存庫 許多有關實現軟體刪除的資源建議為每個實體使用自訂儲存庫,當應用程式具有大量實體時,這可能會很麻煩且難以管理。更好的方法是使用通用儲存庫接口,同時為基本方法提供自訂實現,例如countsdeleteByIddeleteAll

findById
以及其他。

在上面的程式碼片段中,我有 SoftDeleteRepositoryImpl

實作了
SoftDeleteRepository
接口,它透過列出針對軟刪除操作增強的抽象方法來提供另一個抽象層。

步驟 4:修改實體儲存庫以擴充自訂儲存庫介面 最後,透過擴充 SoftDeleteRepository 並提供實體類別名稱和 id 資料類型作為泛型類型參數來修改主儲存庫介面。它也為findByIdfindAlldeleteById

deleteAll
方法提供預設實現,以利用軟刪除自訂實作在
SoftDeleteRepository

介面中。

第 5 步:在服務層實施軟刪除
完成上述步驟後,一切都準備好了。領域服務層不需要進一步的實作。值得注意的是,控制器和單元測試案例也不需要修改。 <script></script> <script></script>要取得所有記錄(包括已刪除的記錄)或已刪除的記錄,您可以使用如下程式碼片段所示的查詢方法:<script></script> <script></script> <script></script> <script></script>

結論

軟刪除是一種有效且靈活的數據管理方法,無需永久刪除數據,非常適合需要數據恢復、合規性或歷史數據追蹤的應用程式。在本指南中,我們討論了軟刪除是什麼、它的優點以及如何使用 R2DBC 在 Spring WebFlux 應用程式中實現它。

您可以在 GitHub 上找到完整的原始碼

以上是使用 RC 在 Spring WebFlux 中實現軟刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

如何將Java的RMI(遠程方法調用)用於分佈式計算?如何將Java的RMI(遠程方法調用)用於分佈式計算?Mar 11, 2025 pm 05:53 PM

本文解釋了用於構建分佈式應用程序的Java的遠程方法調用(RMI)。 它詳細介紹了接口定義,實現,註冊表設置和客戶端調用,以解決網絡問題和安全性等挑戰。

如何使用Java的插座API進行網絡通信?如何使用Java的插座API進行網絡通信?Mar 11, 2025 pm 05:53 PM

本文詳細介紹了用於網絡通信的Java的套接字API,涵蓋了客戶服務器設置,數據處理和關鍵考慮因素,例如資源管理,錯誤處理和安全性。 它還探索了性能優化技術,我

如何在Java中創建自定義網絡協議?如何在Java中創建自定義網絡協議?Mar 11, 2025 pm 05:52 PM

本文詳細介紹了創建自定義Java網絡協議。 它涵蓋協議定義(數據結構,框架,錯誤處理,版本控制),實現(使用插座),數據序列化和最佳實踐(效率,安全性,維護

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。