跳到主要内容

仓库查询返回类型

ChatGPT-4o-mini 中英对照 Repository query return types

支持的查询返回类型

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

备注

地理空间类型(如 GeoResultGeoResultsGeoPage)仅在支持地理空间查询的数据存储中可用。一些存储模块可能会定义它们自己的结果包装类型。

表 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 SeqListMapSetVavr 集合类型。详情请参见 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 的查询还可以发出无限数量的元素。