Repository 查询返回类型

支持的查询返回类型

下表列出了 Spring Data repository 通常支持的返回类型。但是,请查阅特定存储的文档以获取支持的返回类型的确切列表,因为此处列出的某些类型可能在特定存储中不受支持。

地理空间类型(例如 GeoResultGeoResultsGeoPage)仅适用于支持地理空间查询的数据存储。一些存储模块可能会定义自己的结果包装器类型。
表 1. 查询返回类型
返回类型 描述

void

表示没有返回值。

Primitives

Java 基本类型。

Wrapper types

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 构造函数或工厂方法参数的类型

暴露接受 Streamable 作为参数的构造函数或 ….of(…)/….valueOf(…) 工厂方法的类型。详情请参阅返回自定义 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>

从 scroll 查询获得的 Window 结果。提供 ScrollPosition 以发出下一个 scroll 查询。需要一个 ScrollPosition 方法参数。

GeoResult<T>

一个带有附加信息(例如到参考位置的距离)的结果条目。

GeoResults<T>

一个带有附加信息(例如到参考位置的平均距离)的 GeoResult<T> 列表。

GeoPage<T>

一个带有 GeoResult<T>Page,例如到参考位置的平均距离。

Mono<T>

使用响应式 repository 发出零个或一个元素的 Project Reactor Mono。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException

Flux<T>

使用响应式 repository 发出零个、一个或多个元素的 Project Reactor Flux。返回 Flux 的查询也可以发出无限数量的元素。

Single<T>

使用响应式 repository 发出一个元素的 RxJava Single。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException

Maybe<T>

使用响应式 repository 发出零个或一个元素的 RxJava Maybe。期望查询方法最多返回一个结果。如果未找到结果,则返回 Mono.empty()。如果返回多个结果,则会触发 IncorrectResultSizeDataAccessException

Flowable<T>

使用响应式 repository 发出零个、一个或多个元素的 RxJava Flowable。返回 Flowable 的查询也可以发出无限数量的元素。