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。
答案 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
通常,返回类型可以是以下任意类别:
- void
- 原语
- 包装类型
- T
- 迭代器
- 收藏
- 列表
- 可选
- 选项
- 流
- 流式
- 实现Streamable并带有Streamable构造函数或工厂方法参数的类型
- VavrSeq,列表,地图,设置
- 未来
- CompletableFuture
- ListenableFuture
- 切片
- 页面
- GeoResult
- GeoResults
- GeoPage
- 单音
- 助焊剂
- 单人
- 也许
- 可流动