繁体   English   中英

spring 数据 findBy 返回类型

[英]spring data findBy return type

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。

您可能的返回类型列表是正确的。 当您需要对结果进行分页时,您也可以使用PageSlice类型。 见示例:

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

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

“第一种方法允许您将 org.springframework.data.domain.Pageable 实例传递给查询方法,以将分页动态添加到静态定义的查询中。页面知道可用元素和页面的总数。它通过触发计数查询以计算总数的基础设施。由于这可能是昂贵的,具体取决于所使用的商店,因此 Slice 可以用作返回。Slice 只知道是否有下一个 Slice 可用,这在步行时可能就足够了更大的结果集。” - 查看更多信息: Spring Data Documentation

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

Optional<User> findById(Long id);

我希望我有帮助你。 =)

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

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

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

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

并且,当前支持的返回类型的完整列表:

  • 无效
  • 原语
  • 包装类型
  • 迭代器
  • 收藏
  • 列表
  • 可选
  • 选项
  • 流媒体
  • 实现 Streamable 并采用 Streamable 构造函数或工厂方法参数的类型
  • Vavr Seq, List, Map, Set
  • 未来
  • 可完成的未来
  • 未来可听
  • 切片
  • 页面
  • 地理结果
  • 地理结果
  • 地理页面
  • 单声道
  • 助焊剂
  • 单身
  • 也许
  • 流动的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM