HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。
HQL的优点
Hibernate查询语言(HQL)与SQL(结构化查询语言)相同,但不依赖于数据库表。 我们在HQL中使用类名,而不是表名,它是数据库独立的查询语言。HQL有很多优点:
HQL查询的步骤
执行HQL查询的步骤:
2、编写HQL语句
3、调用Session的createQuery方法创建查询对象
4、如果HQL语句包含参数,则调用Query的setXxx方法为参数赋值
5、调用Query对象的list等方法返回查询结果。
例如
上面的程序先编写HQL语句后,使用Session的createQuery(hql)方法创建一个Query,Query对象使用setXxx方法为HQL语句的参数赋值,最后调用list()方法返回查询的全部结果。
在这里Query对象可以连续多次调用setXxx方法为HQL参数赋值。这是因为HibernateQuery的setXxx方法的返回值为Query本身,因此程序创建Query后,可以直接多次调用setXxx方法为HQL语句的参数赋值。
Query对象还包含如下两个方法:
setFirstResult(intfirstResult):设置返回的结果集从第几条记录开始。
setMaxResult(intmaxResult):设置本次查询返回的结果数目。
这两个方法用于对HQL查询实现分页控制。
HQL查询的from语句
如果你想要在存储中加载一个完整并持久的对象,你将使用FROM语句。以下是 FROM 语句的一些简单的语法:
如果你需要在 HQL 中完全限定类名,只需要指定包和类名,如下:
HQL查询的AS 语句
在 HQL 中AS语句能够用来给你的类分配别名,尤其是在长查询的情况下。例如,我们之前的例子,可以用如下方式展示:
关键字AS是可选择的并且你也可以在类名后直接指定一个别名,如下:
HQL查询的SELECT语句
SELECT语句比 from 语句提供了更多的对结果集的控制。如果你只想得到对象的几个属性而不是整个对象你需要使用 SELECT 语句。下面是一个 SELECT 语句的简单语法示例,这个例子是为了得到 Employee 对象的 first_name 字段:
值得注意的是Employee.firstName是 Employee 对象的属性,而不是一个 EMPLOYEE 表的字段。
HQL查询的WHERE 语句
如果你想要精确地从数据库存储中返回特定对象,你需要使用 WHERE 语句。下面是 WHERE 语句的简单语法例子:
HQL查询的ORDER BY 语句
为了给 HSQ 查询结果进行排序,你将需要使用ORDER BY语句。你能利用任意一个属性给你的结果进行排序,包括升序或降序排序。下面是一个使用 ORDER BY 语句的简单示例:
如果你想要给多个属性进行排序,你只需要在 ORDER BY 语句后面添加你要进行排序的属性即可,并且用逗号进行分割:
HQL查询的GROUP BY 语句
这一语句允许 Hibernate 将信息从数据库中提取出来,并且基于某种属性的值将信息进行编组,通常而言,该语句会使用得到的结果来包含一个聚合值。下面是一个简单的使用 GROUP BY 语句的语法:
使用命名参数
Hibernate 的 HQL 查询功能支持命名参数。这使得 HQL 查询功能既能接受来自用户的简单输入,又无需防御 SQL 注入攻击。下面是使用命名参数的简单的语法: