📜  HQL(休眠查询语言)教程和示例

📅  最后修改于: 2021-01-02 15:50:37             🧑  作者: Mango

休眠查询语言(HQL)

休眠查询语言(HQL)与SQL(结构化查询语言)相同,但它不依赖于数据库表。我们在HQL中使用类名代替表名。因此它是数据库独立的查询语言。

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)它将值设置为命名查询参数。

获取所有记录的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 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");