Hibernate查询语言(HQL)与SQL(结构化查询语言)相同, 但它不依赖于数据库表。我们在HQL中使用类名代替表名。因此它是数据库独立的查询语言。
HQL的优势
【Hibernate查询语言(HQL)】HQL有许多优点。它们如下:
- 与数据库无关
- 支持多态查询
- Java程序员易学
它是Hibernate Query的面向对象表示。可以通过调用createQuery()方法Session接口来获取Query对象。
查询接口提供了许多方法。给出了常用的方法:
- public int executeUpdate()用于执行更新或删除查询。
- public List list()以列表的形式返回Ralation的结果。
- 公共查询setFirstResult(int rowno)指定将从中检索记录的行号。
- 公共查询setMaxResult(int rowno)指定否。从关系(表)中检索的记录数。
- public Query setParameter(int position, Object value)它将值设置为JDBC样式查询参数。
- 公共查询setParameter(String name, Object value)它将值设置为命名查询参数。
Query query=session.createQuery("from Emp");
//here persistent class name is Emp
List list=query.list();
通过分页获取记录的HQL示例
Query query=session.createQuery("from Emp");
query.setFirstResult(5);
query.setMaxResult(10);
List list=query.list();
//will return the records from 5 to 10th number
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");
//specifying class name (Emp) not tablename
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");
计算员工ID总数的示例
Query q=session.createQuery("select count(id) from Emp");
获取每个员工平均工资的示例
Query q=session.createQuery("select avg(salary) from Emp");
推荐阅读
- Hibernate事务管理示例
- 使用注解的每个子类的表
- 使用注解的实体表类
- Hibernate二级缓存
- 使用XML的Hibernate一对一示例
- 使用注解Hibernate一对一示例
- 使用注解Hibernate一对多示例
- 使用XML的Hibernate一对多示例
- Hibernate命名查询