仓库查询返回类型
支持的查询返回类型
下表列出了 Spring Data 仓库通常支持的返回类型。但是,请查阅特定存储的文档以获取确切的支持返回类型列表,因为此处列出的一些类型可能在某些存储中不受支持。
备注
地理空间类型(如 GeoResult、GeoResults 和 GeoPage)仅在支持地理空间查询的数据存储中可用。一些存储模块可能会定义它们自己的结果包装类型。
表 1. 查询返回类型
| 返回类型 | 描述 |
|---|---|
void | 表示没有返回值。 |
| 原始类型 | Java 原始类型。 |
| 包装类型 | Java 包装类型。 |
T | 一个唯一实体。期望查询方法最多返回一个结果。如果没有找到结果,返回 null。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException。 |
Iterator<T> | 一个 Iterator。 |
Collection<T> | 一个 Collection。 |
List<T> | 一个 List。 |
Optional<T> | 一个 Java 8 或 Guava 的 Optional。期望查询方法最多返回一个结果。如果未找到结果,则返回 Optional.empty() 或 Optional.absent()。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException。 |
Option<T> | 可以是 Scala 或 Vavr 的 Option 类型。在语义上与之前描述的 Java 8 的 Optional 行为相同。 |
Stream<T> | 一个 Java 8 Stream。 |
Streamable<T> | 一个 Iterable 的便利扩展,直接暴露流式处理、映射和过滤结果、连接等方法。 |
实现 Streamable 的类型,并接受 Streamable 构造函数或工厂方法参数。 | 暴露构造函数或 ….of(…)/….valueOf(…) 工厂方法并接受 Streamable 作为参数的类型。详情请参见返回自定义 Streamable 包装类型。 |
Vavr Seq、List、Map、Set | Vavr 集合类型。详情请参见 Vavr 集合支持。 |
Future<T> | 一个 Future。要求方法使用 @Async 注解,并且需要启用 Spring 的异步方法执行功能。 |
CompletableFuture<T> | 一个 Java 8 CompletableFuture。期望一个方法被注解为 @Async,并要求启用 Spring 的异步方法执行能力。 |
Slice<T> | 一块大小已定的数据,并指示是否有更多数据可用。需要一个 Pageable 方法参数。 |
Page<T> | 一个带有附加信息的 Slice,例如结果的总数。需要一个 Pageable 方法参数。 |
Window<T> | 从滚动查询中获得的结果的 Window。提供 ScrollPosition 用于发出下一个滚动查询。需要一个 ScrollPosition 方法参数。 |
GeoResult<T> | 带有附加信息的结果条目,例如与参考位置的距离。 |
GeoResults<T> | 一个包含附加信息的 GeoResult<T> 列表,例如与参考位置的平均距离。 |
GeoPage<T> | 一个包含 GeoResult<T> 的 Page,例如到参考位置的平均距离。 |
Mono<T> | 一个 Project Reactor Mono 使用反应式仓库发出零或一个元素。期望查询方法最多返回一个结果。如果没有找到结果,则返回 Mono.empty()。如果结果超过一个,则会触发 IncorrectResultSizeDataAccessException。 |
Flux<T> | 一个使用反应式存储库的 Project Reactor Flux,可以发出零个、一个或多个元素。返回 Flux 的查询也可以发出无限数量的元素。 |
Single<T> | 一个 RxJava Single 使用反应式仓库发出单个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果结果超过一个,则会触发 IncorrectResultSizeDataAccessException。 |
Maybe<T> | 一个使用反应式仓库的 RxJava Maybe,它发射零个或一个元素。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果结果超过一个,则触发 IncorrectResultSizeDataAccessException。 |
Flowable<T> | 一个 RxJava Flowable 使用反应式仓库发出零个、一个或多个元素。返回 Flowable 的查询还可以发出无限数量的元素。 |