欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Spring Data Jpa查詢?nèi)坎⑴判?/h1>
 更新時間:2021年11月20日 11:24:32   作者:yogima  
這篇文章主要介紹了使用Spring Data Jpa查詢?nèi)坎⑴判颍哂泻芎玫膮⒖純r值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring Data Jpa查詢?nèi)坎⑴判?/h2>

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

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

2、Service層中如下

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

但注意springboot2.2.1及以上的版本Sort的構(gòu)造方法變?yōu)樗接?,需要像下面這樣寫:

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

JPA之排序問題

1、總覽

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

2、使用JPA / JQL API排序

通過使用Order By關(guān)鍵詞實現(xiàn)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關(guān)鍵字不區(qū)分大小寫,但是實體的名稱及其屬性是區(qū)分的(實體:Student、屬性:id)。

2.1、設(shè)置排序順序

默認情況下,排序順序是升序的,但是可以在JQL字符串中顯式設(shè)置。就像在純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、按兩個及以上的屬性個數(shù)排序

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

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

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

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

注:對于多屬性排序,優(yōu)先排第一個屬性,當?shù)谝粋€值相同時在按照第二個屬性進行排序,以此類推。

2.3、設(shè)置空值的排序優(yōu)先級

默認的空值優(yōu)先級是在數(shù)據(jù)庫中特定了的,但這可以通過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、一對多關(guān)系排序

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

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對應(yīng)的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方法是設(shè)置所有排序參數(shù)的“一站式”選擇:可以設(shè)置排序方向和排序依據(jù)。以下是該方法的API:

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

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

這是一個簡單的示例-按名稱對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方法的參數(shù)區(qū)分大小寫,因為它需要與屬性名稱匹配。

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

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

Hibernate: select * from Student order by asc

3.1、按兩個及以上的屬性個數(shù)排序

要對多個屬性進行排序,只需將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")));

相應(yīng)的SQL查詢?nèi)缦滤荆?/p>

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用pipeline和jacoco獲取自動化測試代碼覆蓋率

    如何使用pipeline和jacoco獲取自動化測試代碼覆蓋率

    這篇文章主要介紹了如何使用pipeline和jacoco獲取自動化測試代碼覆蓋率,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)聊天機器人完善版

    Java實現(xiàn)聊天機器人完善版

    這篇文章主要為大家詳細介紹了Java實現(xiàn)聊天機器人完善版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java 泛型總結(jié)(三):通配符的使用

    Java 泛型總結(jié)(三):通配符的使用

    在泛型的使用中,還有個重要的東西叫通配符,本文介紹通配符的使用。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • SpringBoot利用Redis解決海量重復(fù)提交問題

    SpringBoot利用Redis解決海量重復(fù)提交問題

    本文主要介紹了SpringBoot利用Redis解決海量重復(fù)提交問題,介紹了三種常見的解決方案,包括使用Redis計數(shù)器,使用Redis分布式鎖和使用Redis發(fā)布/訂閱機制,感興趣的可以了解一下
    2024-03-03
  • 基于Java創(chuàng)建XML(無中文亂碼)過程解析

    基于Java創(chuàng)建XML(無中文亂碼)過程解析

    這篇文章主要介紹了基于Java創(chuàng)建XML(無中文亂碼)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式

    jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式

    這篇文章主要介紹了jedis獲取redis中二進制圖片轉(zhuǎn)Base64方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Maven的porfile與SpringBoot的profile結(jié)合使用案例詳解

    Maven的porfile與SpringBoot的profile結(jié)合使用案例詳解

    這篇文章主要介紹了Maven的porfile與SpringBoot的profile結(jié)合使用,通過maven的profile功能,在打包的時候,通過-P指定maven激活某個pofile,這個profile里面配置了一個參數(shù)activatedProperties,不同的profile里面的這個參數(shù)的值不同,需要的朋友可以參考下吧
    2021-12-12
  • java中對象為null時的打印輸出方式

    java中對象為null時的打印輸出方式

    這篇文章主要介紹了java中對象為null時的打印輸出方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 深入理解Java設(shè)計模式之解釋器模式

    深入理解Java設(shè)計模式之解釋器模式

    這篇文章主要介紹了JAVA設(shè)計模式之解釋器模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • spring cloud如何修復(fù)zuul跨域配置異常的問題

    spring cloud如何修復(fù)zuul跨域配置異常的問題

    最近的開發(fā)過程中,使用spring集成了spring-cloud-zuul,在配置zuul跨域的時候遇到了問題,下面這篇文章主要給大家介紹了關(guān)于spring cloud如何修復(fù)zuul跨域配置異常的問題,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09

最新評論