仓库
本章介绍 Spring Data 仓库的基础知识以及 Elasticsearch 的特定内容。在继续了解 Elasticsearch 的特定内容之前,请确保您已牢固掌握基本概念。
Spring Data 仓库抽象的目标是大幅减少为各种持久化存储实现数据访问层所需的样板代码量。
本节小结
核心概念
Spring Data 仓库抽象中的核心接口是 Repository 。它以需要管理的领域类以及该领域类的标识符类型作为类型参数。该接口主要充当标记接口,用以捕获要处理的类型,并帮助您发现扩展了该接口的接口。
定义仓库接口
要定义仓库接口,您首先需要定义一个特定于领域类的仓库接口。该接口必须扩展 `Repository` ,并以领域类和 ID 类型作为类型参数。如果您希望为该领域类型暴露 CRUD 方法,可以扩展 `CrudRepository` 或其某个变体,而不是 `Repository` 。
Elasticsearch 仓库
本章介绍 Elasticsearch 仓库实现的详细内容。
响应式 Elasticsearch 仓库
响应式 Elasticsearch 仓库支持构建在仓库一章中介绍的核心仓库支持之上,利用通过响应式 Elasticsearch 操作提供、由响应式 REST 客户端执行的操作。
创建仓库实例
本节介绍如何为已定义的仓库接口创建实例和 bean 定义。
定义查询方法
仓库代理有两种方式从方法名派生出特定存储的查询:
查询方法
Elasticsearch 模块支持所有基本的查询构建功能,如字符串查询、原生搜索查询、基于条件的查询,或者从方法名派生查询。
投影
本章内容取自 Spring Data Commons 文档,但不适用于 Spring Data Elasticsearch 。
自定义仓库实现
Spring Data 提供了多种选项,让您只需少量编码即可创建查询方法。但当这些选项无法满足您的需求时,您也可以为仓库方法提供自己的自定义实现。本节介绍如何做到这一点。
从聚合根发布事件
由仓库管理的实体就是聚合根。在领域驱动设计的应用中,这些聚合根通常会发布领域事件。 Spring Data 提供了一个名为 @DomainEvents 的注解,您可以将其用于聚合根的某个方法,以尽可能简便地完成该发布,如下例所示:
仓库方法的空值处理
返回单个聚合实例的仓库 CRUD 方法可以使用 Optional 来指示值可能不存在。除此之外, Spring Data 还支持在查询方法上返回以下包装器类型:
CDI 集成
Spring Data Elasticsearch 仓库也可以使用 CDI 功能来搭建。
仓库查询关键词
下表列出了 Spring Data 仓库查询派生机制普遍支持的、用于表达谓词的主题关键词。有关受支持关键词的确切列表,请参阅特定存储的文档,因为此处列出的某些关键词可能在特定存储中不受支持。
仓库查询返回类型
下表列出了 Spring Data 仓库普遍支持的返回类型。但是,有关受支持返回类型的确切列表,请参阅特定存储的文档,因为此处列出的某些类型可能在特定存储中不受支持。