使用頁面: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();