仓库查询返回类型
支持的查询返回类型
下表列出了 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 的查询也可以发射无限数量的元素。 |