Hibernate教程-Hibernate查询语言 (HQL)

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");