使用页面: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