Repositories
本章将介绍 Spring Data 仓库的基本基础以及 Neo4j 的特定内容。在继续了解 Neo4j 的特定内容之前,请确保您对基本概念有扎实的理解。
Spring Data 仓库抽象的目标是显著减少为实现各种持久化存储的数据访问层所需的样板代码量。
章节摘要
📄️ 核心概念
在 Spring Data 的仓库抽象中,核心接口是 Repository。它接受要管理的领域类以及该领域类的标识符类型作为类型参数。这个接口主要作为一个标记接口,用于捕获要处理的类型,并帮助你发现扩展了该接口的其他接口。
📄️ 查询方法
标准的 CRUD 功能存储库通常会对底层数据存储进行查询。使用 Spring Data,声明这些查询会变成一个四步过程:
📄️ 定义仓库接口
要定义一个仓库接口,首先需要定义一个特定于领域类的仓库接口。该接口必须继承 Repository,并且需要指定领域类和 ID 类型的泛型。如果你想为该领域类型暴露 CRUD 方法,可以继承 CrudRepository 或其变体,而不是 Repository。
📄️ 定义查询方法
仓库代理有两种方式从方法名中派生出特定于存储的查询:
📄️ 创建存储库实例
本节介绍如何为已定义的仓库接口创建实例和 bean 定义。
📄️ 自定义仓库实现
Spring Data 提供了多种选项来创建查询方法,只需要很少的编码工作。但当这些选项无法满足你的需求时,你也可以为仓库方法提供自定义的实现。本节将描述如何做到这一点。
📄️ 从聚合根发布事件
由仓库管理的实体是聚合根。在领域驱动设计(Domain-Driven Design)的应用程序中,这些聚合根通常会发布领域事件。Spring Data 提供了一个名为 @DomainEvents 的注解,你可以在聚合根的方法上使用该注解,以便尽可能简化事件的发布,如下例所示:
📄️ Spring Data 扩展
本节文档记录了一组 Spring Data 扩展,这些扩展使得 Spring Data 能够在多种上下文中使用。目前,大多数集成都是针对 Spring MVC 的。
📄️ 按示例查询
本章介绍了按示例查询(Query by Example)并解释了如何使用它。
📄️ 滚动
滚动(Scrolling)是一种更细粒度的方法,用于迭代较大的结果集块。滚动包括稳定的排序、滚动类型(基于偏移量或键集的滚动)以及结果限制。您可以通过使用属性名称定义简单的排序表达式,并通过查询推导使用 Top 或 First 关键字定义静态结果限制。您可以连接表达式,将多个条件收集到一个表达式中。
📄️ Spring Data Neo4j 扩展
Spring Data Neo4j 提供了几个扩展或“混入”(mixins),可以将其添加到存储库中。那么,什么是混入呢?根据维基百科,混入是一种语言概念,它允许程序员将一些代码注入到类中。混入编程是一种软件开发风格,其中功能单元在类中创建,然后与其他类混合在一起。
📄️ 仓库查询关键词
下表列出了通常由 Spring Data 仓库查询派生机制支持的主题关键字,用于表达谓词。请查阅特定存储的文档以获取支持的关键字的准确列表,因为此处列出的一些关键字可能在特定存储中不受支持。
📄️ 仓库查询返回类型
下表列出了 Spring Data 仓库通常支持的返回类型。然而,请查阅特定存储的文档以获取支持的返回类型的准确列表,因为此处列出的某些类型可能在特定存储中不被支持。