使用頁面:LIMIT 和 OFFSET
很多時候,數據庫中的數據是在“頁面”中檢索的。因為這就是處理大型列表的方便之處。我們首先查詢 1 到 20 行,然後是 21 到 40 行,依此類推。
這種情況很常見,SQL 對此 LIMIT 和 OFFSET 有特殊的運算符。
這些運算符的類似物也存在於 Hibernate 中。只有他們立即決定以單獨方法的形式製作它們:
- setFirstResult()類似於OFFSET。
- setMaxResults()類似於LIMIT。
使用這些方法編寫查詢非常容易。讓我們編寫一個查詢,要求返回從 41 開始的 20 個任務。它看起來像這樣:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
排序結果
我們想出瞭如何獲取查詢結果字符串的一部分。下一個緊迫的問題是排序。
Hibernate 中的排序是直接在 HQL 查詢中編寫的,看起來通常符合預期:
from Employee order by joinDate
如果要更改排序順序,則需要使用熟悉的詞:asc 和 desc。例子:
from Employee order by joinDate desc
就像在 SQL 中一樣,您可以按多個字段排序:
from Employee order by joinDate desc, name asc
此外,排序字段可以作為參數傳遞:
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);
List<EmployeeTask> resultLIst = query.list();
HQL 中的函數
就像在 HQL 中的 SQL 中一樣,您可以使用各種函數。
以下是HQL 支持的聚合函數列表:
聚合函數 | 描述 |
---|---|
數數() | 返回行數 |
和() | 計算值的總和 |
分鐘() | 返回最小值 |
最大限度() | 返回最大值 |
平均值() | 返回均值 |
正如您希望記住的那樣,聚合函數是可以與 group by 結合使用的函數。Group By 的工作原理與 SQL 中的完全相同,因此我們不再重複。
當然,還有通常的功能。使用普通函數,一切都簡單得多——它們由 SQL 服務器執行,Hibernate 只需要使用它們正確生成查詢。
因此,Hibernate 支持 SQL Server 支持的所有功能。當您配置 SessionFactory 時,SQL 服務器的類型由 sqlDialect 參數設置。
讓我們找出分配給用戶的任務數:
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();
GO TO FULL VERSION