2024年5月11日发(作者:)
系列
—————————————————————————————
“玩转”Java
Hibernate Query Language:HQL
一、HQL概述
HQL(Hibernate Query Language)是面向对象的查询语言,它和SQL查询语言
有些相似。在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方
式。它有如下特点:
●以面向对象的方式查询数据库表
●在查询语句中设定各种查询条件
●支持投影查询,即仅检索出对象的部分属性
●支持分页查询
●支持连接查询
●支持分组查询,允许使用HAVING和GROUP BY关键字
●提供内置聚集函数,如sum(),min()和max()等
●支持子查询
●支持动态绑定参数
二、语法细节
子句
在SQL中,FROM子句是用于指定要查询的数据库表,在HQL中,替换为
与数据库表对应的Java实体类即可。
例如:
SQL SELECT * FROM EMPS
HQL FROM Employee
此时HQL语句将查询数据库表中的所有字段,并自动注入到对应实体类对
象的对应属性中。
同时需要说明的是:HQL语句中FROM等关键字不区分大小写,但Java类
的类名严格区分大小写。
2.执行HQL查询语句
在Hibernate中,HQL语句由Query对象执行,Query对象可以通过Session
对象获取。
//1.通过session对象创建Query对象
String hql = "FROM Employee";
Query query = Query(hql);
//2.调用Query对象的方法获取查询结果
//结果集中有多条记录:list()
//结果集中只有一条记录:uniqueResult()
List
for (Employee employee : list) {
1
系列
—————————————————————————————
System. n(employee);
}
“玩转”Java
子句
和SQL的语法一样,HQL中的WHERE子句也用来指定查询条件。只不过这
里指定查询条件使用的不是数据库表的字段,而是Java类的属性。
例如:
SQL SELECT * FROM EMPS WHERE >5000
HQL FROM Employee e WHERE >5000
这里Employee e的语法非常像Java中声明一个Employee类型的变量:e。
其实也确实可以这样理解——使用e作为Employee对象的引用。
4.使用基于位置的占位符参数
将上例中的具体值使用占位符“?”代替,并调用Query对象的setXxx()方
法按照参数的不同类型动态填充即可,需要注意的是和JDBC中的
PreparedStatement接口不同,这里占位符的索引从0开始。
HQL FROM Employee e WHERE >?
填充占位符
ble(0, 8000);
5.使用具名参数
在HQL中不但能够使用基于位置的占位符参数,还能够使用基于名称的具
名参数,使用具名参数的好处是不必关心当前参数的索引值。
具名参数的格式是:“:参数名称”。
例如:
HQL FROM Employee e WHERE >:salaryParam
填充占位符
ble( "salaryParam", 9000);
6.以实体类对象作为参数
对于已经通过Hibernate关联关系映射建立了关联关系的实体类,HQL还支
持直接使用实体类对象本身作为参数值。
例如:Employee和Department之间建立了单向(或双向)多对一关联关系,
Employee类中使用department属性关联Department类的对象,那么HQL语句
可以为:
HQL from Employee e where ment=?
这里填充占位符可以使用一个Department对象:
Department department = new Department();
tId(5);
2


发布评论