資料管理是軟體開發中的基本組成部分,特別是在處理需要從活躍使用中刪除的記錄時。許多應用程式使用稱為「軟刪除」的技術,而不是永久刪除記錄(稱為「硬刪除」的方法)。 「軟刪除」方法是一種廣泛使用的解決方案,可將記錄標記為非活動狀態而不永久刪除它們,從而輕鬆實現資料復原和歷史追蹤。
目前,與 Spring Data JPA 和 Hibernate 不同,Spring Data R2DBC 不提供用於自動處理軟刪除的內建註解。因此,開發人員求助於使用自訂儲存庫實作或查詢來實現類似的功能。
在本文中,我們將研究軟刪除、其優點以及如何使用 R2DBC 在 Spring WebFlux 應用程式中實現它。
什麼是軟刪除
軟刪除是一種資料管理方法,其中記錄被標記為不活動或“已刪除”,而不從資料庫中刪除。通常,這涉及向實體添加一個字段,例如deleted(布爾值)或deletedDate(時間戳記),以指示記錄不再活動。軟刪除不是永久刪除數據,而是將記錄標記為邏輯刪除,將其隱藏在標準查詢中,同時保留它以供潛在的恢復或審核。
軟刪除的好處
- 資料恢復:軟刪除可以輕鬆恢復資料。如果一筆記錄被意外刪除,可以透過重置標誌來快速“恢復刪除”,確保資料不會永久遺失。
- 歷史資料:軟刪除提供稽核追蹤。組織通常需要保留歷史資料以實現合規性或報告目的,而軟刪除可以在不擁擠活動資料的情況下實現這一點。
- 資料完整性:在關係複雜的系統中,永久刪除記錄可能會導致連結損壞和資料不一致。軟刪除透過保持相關資料完整,同時將刪除的記錄標記為非活動來解決這個問題。
- 安全性和合規性:法規通常要求將資料保留特定期限。軟刪除使開發人員能夠滿足這些合規性需求,而無需向普通用戶提供資料。
如何使用 Spring Reactive 和 R2DBC 實現軟刪除
如果您有興趣自己實現這一點,我準備了一個入門程式碼 - 一個帶有基本 CRUD 端點和單元測試案例的簡單部落格應用程式。您可以使用此連結從我的 GitHub 儲存庫存取起始程式碼。那麼,讓我們開始吧。
步驟 1:新增欄位以將記錄標記為已刪除
要實現此目的,請在實體類別中新增一個欄位來表示刪除狀態。更有效的方法是建立一個抽象類別 (AbstractSoftDeletableEntity),在其中定義刪除狀態字段,並讓實體類別擴展此抽象類別。此欄位可以是指示記錄是否已刪除的布林值(已刪除),也可以是指示刪除時間的時間戳記(deletedDate)。我建議使用時間戳,因為它提供了刪除發生時間的附加詳細資訊:
第二步:修改實體類,擴展抽象類
修改實體類別以擴展 AbstractSoftDeletableEntity
建立一定程度的抽象和關注點分離,從而遵守物件導向設計的單一職責原則。步驟 3:建立擴充 SimpleR2dbcRepository 的通用自訂儲存庫 許多有關實現軟體刪除的資源建議為每個實體使用自訂儲存庫,當應用程式具有大量實體時,這可能會很麻煩且難以管理。更好的方法是使用通用儲存庫接口,同時為基本方法提供自訂實現,例如counts、deleteById、deleteAll、
findById在上面的程式碼片段中,我有 SoftDeleteRepositoryImpl
實作了步驟 4:修改實體儲存庫以擴充自訂儲存庫介面 最後,透過擴充 SoftDeleteRepository 並提供實體類別名稱和 id 資料類型作為泛型類型參數來修改主儲存庫介面。它也為findById、findAll、deleteById 和
deleteAll介面中。
第 5 步:在服務層實施軟刪除
結論
軟刪除是一種有效且靈活的數據管理方法,無需永久刪除數據,非常適合需要數據恢復、合規性或歷史數據追蹤的應用程式。在本指南中,我們討論了軟刪除是什麼、它的優點以及如何使用 R2DBC 在 Spring WebFlux 應用程式中實現它。
您可以在 GitHub 上找到完整的原始碼
以上是使用 RC 在 Spring WebFlux 中實現軟刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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