背景:
在操作資料上,我們可能要對資料進行排序,比如SQL語句中的OrderBy等,在JPQL中,在查詢語句中傳入Sort類相關屬性即可得到相應的結果。
代碼示範:
在傳入參數的時候,你可以new執行個體化Sort類,在構造器中傳入相應的排序規則和要排序的屬性,代碼:
Dao
@Query("SELECT p FROM Person p WHERE p.firstName LIKE %?1%")
public List<Person> findPersonBySort(String userName, Sort sort);
Dao測試類:

官網給的例子竟然deprecated了。。why?
分析一下。。。
所有的排序,都有一種順序,我們把它定義為大或者小,兒Sort隻有一個參數的構造器是沒有傳遞大小的排序規則的
進入源碼分析:
原來是有一個預設的排序規則![]()
SpringBoot--jpa之Sort查詢背景: 預設是升序的規則,為什麼廢棄調沒有排序規則的這個構造方法,可能作者認為在排序的時候就如你寫SQL時一樣,必須指定規則,是以,一定有個構造方法是指定了排序規則和要排序的字段。
public static final Direction DEFAULT_DIRECTION = Direction.ASC;
是以就有了:
又或者:
用實體之外的字段對查詢結果排序
除了對查詢實體的字段進行排序,我們可能會有這樣的需求:
比如:用實體中的某個字段的長度進行排序
@Test
public void getPersonBySort() {
System.out.println(dao.findPersonBySort("ta", Sort.by(Sort.Direction.ASC, "LENGTH(lastName)")));
}
這樣看起來順利成章,運作一下
抛異常了。。。異常資訊中也告訴我們不能這樣用,正确的打開方式應該是:
@Test
public void getPersonBySort() {
System.out.println(dao.findPersonBySort("ta", JpaSort.unsafe(Sort.Direction.ASC, "LENGTH(lastName)")));
}
運作結果: