0

0

使用 RC 在 Spring WebFlux 中实现软删除

花韻仙語

花韻仙語

发布时间:2024-11-14 11:15:01

|

931人浏览过

|

来源于dev.to

转载

使用 rc 在 spring webflux 中实现软删除

数据管理是软件开发中的基本组成部分,尤其是在处理需要从活跃使用中删除的记录时。许多应用程序使用称为“软删除”的技术,而不是永久删除记录(称为“硬删除”的方法)。 “软删除”方法是一种广泛使用的解决方案,可将记录标记为非活动状态而不永久删除它们,从而轻松实现数据恢复和历史跟踪。

目前,与 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 的通用自定义存储库

许多有关实现软删除的资源建议为每个实体使用自定义存储库,当应用程序具有大量实体时,这可能会很麻烦且难以管理。更好的方法是使用通用存储库接口,同时为基本方法提供自定义实现,例如 countsdeleteByIddeleteAllfindById 和其他。

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

在上面的代码片段中,我有 SoftDeleteRepositoryImpl 实现了 SoftDeleteRepository 接口,它通过列出针对软删除操作增强的抽象方法来提供另一个抽象层。

步骤 4:修改实体存储库以扩展自定义存储库接口

最后,通过扩展 SoftDeleteRepository 并提供实体类名称和 id 数据类型作为泛型类型参数来修改主存储库接口。它还为 findByIdfindAlldeleteByIddeleteAll 方法提供默认实现,以利用软删除自定义实现定义在 SoftDeleteRepository 接口中。

第 5 步:在服务层实施软删除

完成上述步骤后,一切就都准备好了。领域服务层不需要进一步的实现。值得注意的是,控制器和单元测试用例也不需要修改。

要获取所有记录(包括已删除的记录)或已删除的记录,您可以使用如下代码片段所示的查询方法:

结论

软删除是一种有效且灵活的数据管理方法,无需永久删除数据,非常适合需要数据恢复、合规性或历史数据跟踪的应用程序。在本指南中,我们讨论了软删除是什么、它的优点以及如何使用 R2DBC 在 Spring WebFlux 应用程序中实现它。

您可以在 GitHub 上找到完整的源代码

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

98

2025.08.06

hibernate和mybatis有哪些区别
hibernate和mybatis有哪些区别

hibernate和mybatis的区别:1、实现方式;2、性能;3、对象管理的对比;4、缓存机制。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

137

2024.02.23

Hibernate框架介绍
Hibernate框架介绍

本专题整合了hibernate框架相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.08.06

Java Hibernate框架
Java Hibernate框架

本专题聚焦 Java 主流 ORM 框架 Hibernate 的学习与应用,系统讲解对象关系映射、实体类与表映射、HQL 查询、事务管理、缓存机制与性能优化。通过电商平台、企业管理系统和博客项目等实战案例,帮助学员掌握 Hibernate 在持久层开发中的核心技能。

32

2025.09.02

Hibernate框架搭建
Hibernate框架搭建

本专题整合了Hibernate框架用法,阅读专题下面的文章了解更多详细内容。

64

2025.10.14

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

216

2025.10.31

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

54

2025.09.05

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号