HQL概述

在Hibernate中查询数据的方式有以下几种:
使用session:查询指定主键的实体
导航对象图方式:通过主动对象调用关联属性的getter方法查询关联对象
使用HQL: Hibernate Query Language,具有与SQL类似语法的面向对象的查询语句,用于操作持久化类、实例及属性。使用Query对象来执行CRUD操作。
使用Criteria对象:按条件对象查询(Query By Criteria,QBC)。使用Criteria对象来执行CRUD操作。
使用原生(native)SQL语句。使用SQLQuery对象来执行CRUD操作。
HQL语句中的实体类名和属性名区分大小写,除此之外,不区分大小写。

HQL示例

Hibernate_Query_Language基础认识

使用HQL查询步骤

获取Hibernate Session对象。
编写HQL语句。
以HQL语句作为参数,调用Session的createQuery方法创建查询对象。
如果HQL语句包含参数占位符,则调用Query的setParameter()方法为参数赋值。
调用Query对象的list等方法返回查询结果或执行更新、删除等操作。

Query接口及其常用方法

Query接口封装了对底层数据库表的查询请求
Hibernate_Query_Language基础认识

常用HQL语句

查询所有持久化对象

使用”from XXX”HQL语句可以查询所有持久化对象,此时查询结果是一个元素为持久化类类型的List或Ierator。
Hibernate_Query_Language基础认识

对查询结果排序

可以使用order by对查询结果设置按某个或某些成员属性升序(”ASC”)或降序(”DESC”)排列,默认为升序。
Hibernate_Query_Language基础认识

查询部分属性

HQL除了可以查询实体外,也可以查询成员属性,此时查询结果是一个元素为Object数组或对象类型的List或Ierator。
Hibernate_Query_Language基础认识

聚合查询

AVG():对指定属性求平均值。
SUM():对指定属性求总和,返回值类型为被求值的属性所对应的类型。
COUNT(*):统计实体数量。
MAX():求给定实体属性中的最大值。
MIN():求给定实体属性中的最小值。
Hibernate_Query_Language基础认识

排除相同记录的DISTINCT

查询时,有时会得到重复的查询内容,此时可使用distinct去除相同的内容而保留一份内容。
Hibernate_Query_Language基础认识

分组统计

可以将聚合函数和group by及having结合起来在分组中进行统计
Hibernate_Query_Language基础认识

关联查询

在HQL中,支持以下几种关联:
inner join/join : 内连接
返回两个关联实体中具有关联的所有字段。
left outer join/left join:左外连接
返回对应内连接的所有对象及左边持久化类的末关联对象。
right outer join/right join:右外连接
返回对应内连接的所有对象及右边持久化类的末关联对象。
left outer/inner join fetch :
查询主对象的同时也查询被关联的对象。
Hibernate_Query_Language基础认识

where 子句

限定条件查询
范围条件查询
给定值列表条件查询
多(and)条件查询
或(or)条件查询
逻辑非条件查询
为空条件查询
模糊条件查询
使用参数占位符查询

范围查询

可以使用(not)between…and…查询某个属性值处于或不处于某个范围之间的实体或实体属性。
Hibernate_Query_Language基础认识

在给定值列表中查询

可以使用(not)in运算符在某个属性给定值列表中查找实体或实体属性
Hibernate_Query_Language基础认识

限定条件、and、or和逻辑非运算

Hibernate_Query_Language基础认识

模糊查询

可以使用like运算符进行模糊查询,”%”代表任意个字符,”_”代表一个字符
Hibernate_Query_Language基础认识

空值查询

可以使用is(not) null运算符来判断属性值是否为NULL
Hibernate_Query_Language基础认识

使用参数占位符

可以使用?和名称设置参数占位符实现动态设置参数
Hibernate_Query_Language基础认识

批量更新

在hibernate3.0之后,hibernate提供了更新HQL来直接更新一条或多条记录
Hibernate_Query_Language基础认识

批量删除

在hibernate3.0之后,hibernate提供了更新HQL来直接删除一条或多条记录
Hibernate_Query_Language基础认识

相关文章: