亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Spring Data Jpa查詢全部并排序

發布時間:2021-11-21 13:53:29 來源:億速云 閱讀:2155 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關如何使用Spring Data Jpa查詢全部并排序,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Spring Data Jpa查詢全部并排序

1、Repository層只需要簡單地extends JpaRepository

依舊不用寫任何東西。因為它自己其實有一個findAll(Sort sort)的方法,直接用就可以了。

2、Service層中如下

List<xxxDO> xxxDOS = xxxRepository.findAll(new Sort(Sort.Direction.ASC,"屬性名"));

但注意springboot2.2.1及以上的版本Sort的構造方法變為私有,需要像下面這樣寫:

List<xxxDO> xxxDOS = xxxRepository.findAll(Sort.by(Sort.Direction.ASC,"屬性名"));

JPA之排序問題

1、總覽

本文將要探討的是用于Java Persistence API(JPA)排序的各種實現方式,它們適用于簡單實體以及一對多關系中的實體。這些方法將排序工作的負擔委托給數據庫層。

2、使用JPA / JQL API排序

通過使用Order By關鍵詞實現JQL排序:

String jql ="Select * from Student order by id";
Query query = entityManager.createQuery (jql);

基于上面的查詢,JPA生成如下簡單的SQL語句:

Hibernate: select * from Student order by id

注:JQL字符串中的SQL關鍵字不區分大小寫,但是實體的名稱及其屬性是區分的(實體:Student、屬性:id)。

2.1、設置排序順序

默認情況下,排序順序是升序的,但是可以在JQL字符串中顯式設置。就像在純SQL中一樣,排序選項是asc和desc:

String jql = "Select * from Student order by id desc";
Query sortQuery = entityManager.createQuery(jql);

其生成的SQL查詢將會包括排序的升降方向:

Hibernate: select * from Student order by id desc

2.2、按兩個及以上的屬性個數排序

為了按多個屬性排序,會將需要排序的屬性都添加到JQL字符串的order by子句中:

String jql="Select * from Student Order by name asc,id desc";
Query sortQuery = entityManager.createQuery(jql);

同樣的排序條件將會出現在生成的SQL查詢語句中:

Hibernate: select * from Student order by name asc,id desc

注:對于多屬性排序,優先排第一個屬性,當第一個值相同時在按照第二個屬性進行排序,以此類推。

2.3、設置空值的排序優先級

默認的空值優先級是在數據庫中特定了的,但這可以通過HQL查詢字符串中的NULLS FIRST或NULLS LAST子句進行自定義。

舉一個簡單的示例–按Student的name屬性降序排列,并將Nulls放在末尾:

Query sortQuery = entityManager.createQuery
  ("Select * from Student order by name desc NULLS LAST");

那么,其生成的SQL查詢將是如下情況:

Hibernate: select * from Student order by case when name is null then 1 else 0 end, desc

2.4、一對多關系排序

超越基本示例,現在看一個用例,該用例涉及以一對多關系對實體進行排序– Bar包含Student實體的集合。我們要對Bar實體及其Student實體的集合進行排序-JPA對于此任務特別簡單:

1、對集合進行排序:在Bar實體的Student集合上添加一個@OrderBy注解:

@OrderBy("name ASC")
List <Student> studentList;

2、對包含集合的實體進行排序:

String jql = "Select * from Bar as b order by b.id";
Query barQuery = entityManager.createQuery(jql);
List<Bar> barList = barQuery.getResultList();

注:此處使用了@OrderBy注解的原因是:我們要對每個Bar的Student集合進行排序。

接下來看一下以上JQL對應的SQL語句吧:

Hibernate: select * from Bar b order by b.id
Hibernate: 
select * from Student slist where slist.bar_id=? order by slist.name asc

第一個查詢對父Bar實體進行排序。生成第二個查詢以對屬于Bar的子Student實體的集合進行排序。

3、使用JPA條件查詢對象API進行排序

使用JPA Criteria – orderBy方法是設置所有排序參數的“一站式”選擇:可以設置排序方向和排序依據。以下是該方法的API:

orderBy(CriteriaBuilder.asc):升序排序。 orderBy (CriteriaBuilder.desc): 降序排序。

每個Order實例都是通過CriteriaBuilder對象的asc或desc方法創建的.

這是一個簡單的示例-按名稱對Student進行排序:

CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> from = criteriaQuery.from(Student.class);
CriteriaQuery<Student> select = criteriaQuery.select(from);
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")));

get方法的參數區分大小寫,因為它需要與屬性名稱匹配。

與簡單的JQL相反,JPA條件查詢對象API會在查詢中強制使用明確的順序方向。注意,在此代碼片段的最后一行中,criteriaBuilder對象通過調用其asc方法指定了升序排列。

執行上述代碼后,JPA會生成如下所示的SQL查詢。 JPA Criteria Object生成帶有顯式asc子句的SQL語句:

Hibernate: select * from Student order by asc

3.1、按兩個及以上的屬性個數排序

要對多個屬性進行排序,只需將Order實例傳遞給orderBy方法,以對每個屬性進行排序。 這是一個簡單的示例-按名稱和ID分別按升序和降序排序:

CriteriaQuery<Student> criteriaQuery = criteriaBuilder.createQuery(Student.class);
Root<Student> from = criteriaQuery.from(Student.class); 
CriteriaQuery<Student> select = criteriaQuery.select(from); 
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")),
    criteriaBuilder.desc(from.get("id")));

相應的SQL查詢如下所示:

Hibernate: select * from Student order by name asc,id desc

關于“如何使用Spring Data Jpa查詢全部并排序”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

精河县| 台州市| 新竹市| 兴海县| 区。| 辉南县| 上蔡县| 都匀市| 卫辉市| 舒兰市| 铁岭市| 肃宁县| 浮山县| 新化县| 吴旗县| 永宁县| 平顺县| 视频| 蒙自县| 红原县| 上思县| 长兴县| 麻阳| 松阳县| 枣庄市| 凤冈县| 渝中区| 柳林县| 邢台县| 沂南县| 文成县| 左贡县| 板桥市| 越西县| 安远县| 博罗县| 滕州市| 肇州县| 大丰市| 双鸭山市| 呼玛县|