參看易百教程:https://www.yiibai.com/jpa/jpa_jpql.html
1 order by子句
1.1 語法
order by子句用於對查詢結果集進行排序。和SQL的用法類似,可以用“asc“和 "desc“指定升降序。如果不顯式註明,默認爲升序。
1.2 測試代碼
@Test
public void testOrderBy(){
Stringjpql= "FROM Customer c WHERE c.age > ?ORDER BY c.age DESC";
Queryquery= entityManager.createQuery(jpql).setHint(QueryHints.HINT_CACHEABLE,true);
//佔位符的索引是從 1 開始
query.setParameter(1, 4);
List<Customer>customers= query.getResultList();
for (Customer customer : customers) {
System.out.println(customer);
}
}
2 group by子句
2.1 group by子句
group by 子句用於對查詢結果分組統計,通常需要使用聚合函數。常用的聚合函數主要有AVG、SUM、COUNT、MAX、MIN 等,它們的含義與SQL相同。例如:select max(o.id) from Orders o
沒有 group by 子句的查詢是基於整個實體類的,使用聚合函數將返回單個結果值,可以使用Query.getSingleResult()得到查詢結果。例如:
2.2 having子句
Having 子句用於對 groupby 分組設置約束條件,用法與where 子句基本相同,不同是 where 子句作用於基表或視圖,以便從中選擇滿足條件的記錄;having 子句則作用於分組,用於選擇滿足條件的組,其條件表達式中通常會使用聚合函數。
例如,以下語句用於查詢訂購總數大於100的商家所售商品及數量:
select o.seller,o.goodId, sum(o.amount) from V_Orders o group by o.seller, o.goodId havingsum(o.amount) > 100
having子句與where子句一樣都可以使用參數。
2.3 測試代碼
//查詢 order 數量大於 2 的那些 Customer
@Test
public void testGroupBy(){
Stringjpql= "SELECT o.customer FROM Order o "
+"GROUP BY o.customer "
+"HAVING count(o.id) >= 2";
List<Customer>customers= entityManager.createQuery(jpql).getResultList();
System.out.println(customers);
}