簡體   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