日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Data JPA 从入门到精通~JpaSpecificationExecutor的使用方法

發布時間:2024/7/23 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data JPA 从入门到精通~JpaSpecificationExecutor的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?JpaSpecificationExecutor 源碼和 API

我們也可以通過 idea 工具詳細看其用法和實現類,JpaSpecificationExecutor 是 Repository 要繼承的接口,而 SimpleJpaRepository 是其默認實現。而通過源碼來看其提供的 API 比較簡單、明了,有如下幾個方法:

public interface JpaSpecificationExecutor<T> {//根據 Specification 條件查詢單個對象,注意的是,如果條件能查出來多個會報錯T findOne(@Nullable Specification<T> spec);//根據 Specification 條件查詢 List 結果List<T> findAll(@Nullable Specification<T> spec);//根據 Specification 條件,分頁查詢Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);//根據 Specification 條件,帶排序的查詢結果List<T> findAll(@Nullable Specification<T> spec, Sort sort);//根據 Specification 條件,查詢數量long count(@Nullable Specification<T> spec); }

不難看出,這個接口基本是圍繞著 Specification 接口來定義的。我們先來看下其源碼:

仔細看看圖,就會發現 Specifications 的接口實現類就三個。

/*** Specifications 是 Spring Data JPA 對 Specification 的聚合操作工具類,里面有以下四個方法: */ @Deprecated //已經不推薦使用了,我們可以用 Specification 來代替,如上圖。 public class Specifications<T> implements Specification<T>, Serializable {private final Specification<T> spec;//構造方法私有化,只能通過 where/not 創建 Specifications 對象。private Specifications(Specification<T> spec) {this.spec = spec;}//創建 where 后面的 Predicate 集合public static <T> Specifications<T> where(Specification<T> spec) {return new Specifications<T>(spec);}//創建 not 集合的 Predicatepublic static <T> Specifications<T> not(Specification<T> spec) {return new Specifications<T>(new NegatedSpecification<T>(spec));}//Specification 的 and 關系集合public Specifications<T> and(Specification<T> other) {return new Specifications<T>(new ComposedSpecification<T>(spec, other, AND));}//Specification 的 or 關系集合public Specifications<T> or(Specification<T> other) {return new Specifications<T>(new ComposedSpecification<T>(spec, other, OR));} ...... }

而如果查看 Specifications 源碼的話就會發現,其已經將來要被刪除了,已經不推薦使用了,而另外兩個都是局部私有的,所以真正關注的就是 Specification 接口中如下一個接口方法:

public interface Specification<T> {Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb); }

從這里可以看出,每個調用的地方都需要,創建 Specification 的實現類,而 JpaSpecificationExecutor 是針對 Criteria API 進行了 predicate 標準封裝,幫我們封裝了通過 EntityManager 的查詢和使用細節,使操作 Criteria 更加便利了一些。所以我們要掌握一下 Predicate、Root、CriteriaQuery、CriteriaBuilder 是什么?

總結

以上是生活随笔為你收集整理的Spring Data JPA 从入门到精通~JpaSpecificationExecutor的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。