spring data findBy返回类型

时间:2016-07-01 14:04:08

标签: java spring spring-data

spring数据findBy方法有哪些可能的返回类型?我还没有在任何地方找到任何综合名单。

像findByXXX可以返回

1) Entity
2) Optional<Entity>
3) List<Entity>
4) Stream<Entity>

还有更多,但我们有一个明确的清单吗?

此外,List<Entity>在没有找到数据时返回emptyList但是Stream<Entity>在没有找到数据时返回null,所以当你在流上应用map / filter等时,你得到了NPE。

除了在调用流函数之前物理检查null之外,是否有更好的方法来使用Stream而不会导致NPE。

2 个答案:

答案 0 :(得分:0)

您的可能退货类型列表是正确的。当您需要分页结果时,您也可以使用页面切片类型。见例:

Page<User> findByLastname(String lastname, Pageable pageable);

Slice<User> findByLastname(String lastname, Pageable pageable);

&#34;第一种方法允许您将org.springframework.data.domain.Pageable实例传递给查询方法,以动态地将分页添加到静态定义的查询中。页面知道可用元素和页面的总数。它通过基础设施触发计数查询来计算总数来实现。由于这可能很昂贵,具体取决于所使用的商店,Slice可以用作返回。 Slice只知道是否有下一个Slice可用,这可能只是在行走时考虑更大的结果集。&#34; - 请参阅:Spring Data Documentation

对于另一个问题,您可以使用Guava / Java 8 可选。这样,您的查询方法将返回包含找到的对象的Optional或空的Optional。 可选是一种使用非空值替换可为空的T引用的方法,请参阅示例:

Optional<User> findById(Long id);

我希望我能帮到你。 =)

答案 1 :(得分:0)

虽然有点晚,但是此处记录了受支持的返回类型:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-return-types

通常,返回类型可以是以下任意类别:

  1. (可选)单个项目,可以是原始,包装或对象,也可以是空的
  2. 项目集合或分页列表
  3. 流,迭代器,Mono / Flux或类似的内容。
  4. 未来或其变体

,以及当前支持的返回类型的完整列表:

  
      
  • void
  •   
  • 原语
  •   
  • 包装类型
  •   
  • T
  •   
  • 迭代器
  •   
  • 收藏
  •   
  • 列表
  •   
  • 可选
  •   
  • 选项
  •   
  •   
  • 流式
  •   
  • 实现Streamable并带有Streamable构造函数或工厂方法参数的类型
  •   
  • VavrSeq,列表,地图,设置
  •   
  • 未来
  •   
  • CompletableFuture
  •   
  • ListenableFuture
  •   
  • 切片
  •   
  • 页面
  •   
  • GeoResult
  •   
  • GeoResults
  •   
  • GeoPage
  •   
  • 单音
  •   
  • 助焊剂
  •   
  • 单人
  •   
  • 也许
  •   
  • 可流动
  •