简介
本章介绍 Spring Data repositories 的基本基础以及 LDAP 特有内容。在继续介绍 LDAP 特有内容之前,请确保你已充分理解 Working with Spring Data Repositories 中解释的基本概念。
Spring Data 仓储抽象的目标是显著减少实现各种持久化存储的数据访问层所需的样板代码数量。
使用 Spring Data Repositories
Spring Data 仓库抽象的目标是显著减少实现各种持久化存储的数据访问层所需的样板代码量。
Spring Data repository 文档和您的模块
本章解释 Spring Data repositories 的核心概念和接口。本章信息取自 Spring Data Commons 模块。它使用 Jakarta Persistence API (JPA) 模块的配置和代码示例。如果您想使用 XML 配置,则应将 XML 命名空间声明和要扩展的类型调整为您所使用的特定模块的对应项。“Namespace reference” 介绍了 XML 配置,该配置在所有支持 repository API 的 Spring Data 模块中都受支持。“Repository query keywords” 介绍了 repository 抽象通常支持的查询方法关键字。有关您模块特定功能的详细信息,请参阅本文档中该模块对应的章节。
章节摘要
📄️ 核心概念
Spring Data 仓储抽象中的核心接口是 Repository。它接受需要管理的领域类以及领域类的标识符类型作为类型参数。此接口主要作为标记接口,用于捕获需要处理的类型,并帮助你发现扩展该接口的接口。
📄️ 定义 Repository 接口
要定义 Repository 接口,你首先需要定义一个与 domain class 对应的 Repository 接口。该接口必须继承 Repository,并将类型参数指定为 domain class 和 ID 类型。如果你想为该 domain type 暴露 CRUD 方法,你可以继承 CrudRepository,或其某个变体,而不是 Repository。
📄️ 创建 Repository 实例
本部分介绍如何为已定义的 repository interfaces 创建实例和 bean definitions。
📄️ 定义 Query Methods
repository proxy 有 2 种从方法名称推导特定于 store 的查询的方式:
📄️ 投影
Spring Data 查询方法通常返回由 repository 管理的一个或多个 aggregate root 实例。然而,有时可能希望基于这些类型的某些属性创建 projections。Spring Data 允许建模专用返回类型,以更选择性地检索受管 aggregates 的部分视图。
📄️ Custom Repository 实现
Spring Data 提供了多种选项,可用于以少量编码创建查询方法。但当这些选项无法满足需求时,你也可以为 repository 方法提供自己的自定义实现。本节将介绍如何执行此操作。
📄️ 从 Aggregate Roots 发布事件
由仓库管理的实体是聚合根。在领域驱动设计应用中,这些聚合根通常会发布领域事件。Spring Data 提供了一个名为 @DomainEvents 的注解,你可以将其用于聚合根的方法上,使事件发布尽可能简单,如下例所示:
📄️ Spring Data 扩展
本节记录了一组 Spring Data 扩展,它们使 Spring Data 能够在多种上下文中使用。目前,大部分集成都面向 Spring MVC。
📄️ Repository Methods 的 Null 处理
返回单个 aggregate 实例的 Repository CRUD 方法可以使用 Optional 来表示值可能不存在。除此之外,Spring Data 支持在查询方法中返回以下包装类型:
📄️ Namespace 引用
 元素触发 Spring Data 仓库基础设施的设置。最重要的属性是 base-package,它定义要扫描 Spring Data 仓库接口的包。参见 “XML Configuration”。下表描述了 元素的属性:
📄️ Repository 查询关键字
下表列出了 Spring Data repository 查询派生机制通常支持用于表达谓词的主语关键字。请查阅特定 store 的文档,以获取支持的关键字的准确列表,因为此处列出的某些关键字可能不被特定 store 支持。
📄️ Repository 查询返回类型
以下表格列出了 Spring Data 仓储通常支持的返回类型。不过,请查阅与具体存储相关的文档以获取支持的返回类型的准确列表,因为这里列出的某些类型在特定存储中可能不受支持。