Hibernate查询语言(HQL)

Hibernate查询语言(HQL)与SQL(结构化查询语言)相同, 但它不依赖于数据库表。我们在HQL中使用类名代替表名。因此它是数据库独立的查询语言。
HQL的优势
【Hibernate查询语言(HQL)】HQL有许多优点。它们如下:

  • 与数据库无关
  • 支持多态查询
  • Java程序员易学
查询界面
它是Hibernate Query的面向对象表示。可以通过调用createQuery()方法Session接口来获取Query对象。
查询接口提供了许多方法。给出了常用的方法:
  1. public int executeUpdate()用于执行更新或删除查询。
  2. public List list()以列表的形式返回Ralation的结果。
  3. 公共查询setFirstResult(int rowno)指定将从中检索记录的行号。
  4. 公共查询setMaxResult(int rowno)指定否。从关系(表)中检索的记录数。
  5. public Query setParameter(int position, Object value)它将值设置为JDBC样式查询参数。
  6. 公共查询setParameter(String name, Object value)它将值设置为命名查询参数。
获取所有记录的HQL示例
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");

    推荐阅读