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