Hibernate查询语言 (HQL) 与SQL(结构化查询语言)相同,但它不依赖于数据库中的表。HQL使用类名代替表名,因此是一种与数据库无关的查询语言。

HQL的优势

HQL有很多优点,如下所示:

  • 与数据库无关
  • 支持多态查询
  • 对于Java程序员来说容易学习

Query接口

Query接口是Hibernate查询的面向对象表示。Query对象可以通过Session接口的 createQuery() 方法获得。

Query接口提供了许多方法。以下是一些常用方法:

  • public int executeUpdate() 用于执行更新或删除查询。
  • public List list() 返回结果集作为列表。
  • public Query setFirstResult(int rowno) 指定从哪个行号开始检索记录。
  • public Query setMaxResult(int rowno) 指定从关系(表)中检索的记录数。
  • public Query setParameter(int position, Object value) 设置JDBC样式的查询参数值。
  • public Query setParameter(String name, Object value) 设置命名查询参数值。

HQL示例

获取所有记录的HQL示例

Query query = session.createQuery("from Emp"); // 这里持久类名是Emp
List list = query.list();

带分页功能的HQL查询示例

Query query = session.createQuery("from Emp");
query.setFirstResult(5);
query.setMaxResult(10);
List list = query.list(); // 将返回第5到第10条记录

HQL更新查询示例

Transaction tx = session.beginTransaction();
Query q = session.createQuery("update User set name=:n where id=:i");
q.setParameter("n", "Udit Kumar");
q.setParameter("i", 111);

int status = q.executeUpdate();
System.out.println(status);
tx.commit();

HQL删除查询示例

Query query = session.createQuery("delete from Emp where id=100");
// 指定类名(Emp)而不是表名
query.executeUpdate();

HQL聚合函数

你可以通过HQL调用 avg()min()max() 等聚合函数。让我们来看一些常见示例:

获取所有员工总薪资的示例

Query q = session.createQuery("select sum(salary) from Emp");
List<Integer> list = q.list();
System.out.println(list.get(0));

获取员工最高薪资的示例

Query q = session.createQuery("select max(salary) from Emp");

获取员工最低薪资的示例

Query q = session.createQuery("select min(salary) from Emp");

计算员工总数的示例

Query q = session.createQuery("select count(id) from Emp");

获取每个员工平均薪资的示例

Query q = session.createQuery("select avg(salary) from Emp");

标签: Hibernate, Hibernate教程, Hibernate框架, Hibernate框架设计, Hibernate初级教程, Hibernate框架用法, Hibernate指南, Hibernate入门, Hibernate中级教程, Hibernate进阶教程, Hibernate高级教程, Hibernate下载