hiberbate HQL

来源:互联网 发布:房产中介辅助软件 编辑:程序博客网 时间:2024/05/16 11:57

hibernate查询语言(Hibernate Query language,HQL),它是Hibernate提供的一种面向对象的查询语言,和SQL查询语言很相似。在Hibervate提供的各种查询方式中,它是使用最广泛的一种,也是官方推荐使用的查询方式,它具有一下功能:

(1)在查询语句中设定各种查询条件。

(2)支持动态绑定参数。

(3)支持投影查询(即仅检索出对象的部分属性)、分页查询、连接查询、分组查询(group by,having),以及子查询。

(4)内置一些聚集函数。

   Hibernate中的Query接口就是专门用来执行HQL语句的查询接口,他能够执行各种复杂的HQL查询语句。

1.创建查询对象

在session的对象上调用createQuery()方法可以创建一个HQL查询。代码如下:

Query query=session.createQuery("from Dept");

from Dept 这个字符串就是HQL语句,将创建查询语句之后,就可以执行查询。

2.准备好Query对象后,就可执行那个它并把执行返回的结果获取到内存中。访问结果的方式有以下几种:

1)列出所有结果

调用Query对象的list()方法可以返回所有结果的列表,通过一次循环就可以把整个结果都遍历一遍,这是在实际应用开发最常用的查询方式。

代码:

Query query=session.createQuery("from Dept");//创建查询对象

List<Dept> depts=query.list();//返回所有结果

for(Dept dept:depts){//用forEach循环遍历整个结果列表        

}

2)列出单个结果

有时,只需要访问查询返回的单个结果,通过确信查询只会返回一个对象,就可以直接调用Query对象的uniqueResult()方法

代码:

Query query=session.createQuery("from Dept where id=1");

Dept dept=(Dept)query.uniqueResult()

但是如果返回的结果不止一个对象,直接调用uniqueQuery()方法就会抛出异常。这是,需要先调用setmaxResults(1)来明确指定只需要返回一个对象。代码如下:

Query query=session.createQuer("from Dept");

query.setMaxResults(1);

Dept dept=(Dept)query.uniqueResult();

另外说明一点Query接口的选项设置(setXXX)等都会返回Query对象本身。因此Query接口的操作支持方法链方式,上面所示代码可以改成如下代码。

Dept dept=(Dept)Session.createQuery("from Query");

                                                .setMaxResult(1);

                                                .uniqueResult();

这样可以使代码更简洁,更直观。

3)迭代访问结果

Query接口还提供了一个iterate()方法来执行查询,此时Hibernate会再第一个SQL SELECT.语句中只