HQL概述
在Hibernate中查询数据的方式有以下几种:
使用session:查询指定主键的实体
导航对象图方式:通过主动对象调用关联属性的getter方法查询关联对象
使用HQL: Hibernate Query Language,具有与SQL类似语法的面向对象的查询语句,用于操作持久化类、实例及属性。使用Query对象来执行CRUD操作。
使用Criteria对象:按条件对象查询(Query By Criteria,QBC)。使用Criteria对象来执行CRUD操作。
使用原生(native)SQL语句。使用SQLQuery对象来执行CRUD操作。
HQL语句中的实体类名和属性名区分大小写,除此之外,不区分大小写。
HQL示例
使用HQL查询步骤
获取Hibernate Session对象。
编写HQL语句。
以HQL语句作为参数,调用Session的createQuery方法创建查询对象。
如果HQL语句包含参数占位符,则调用Query的setParameter()方法为参数赋值。
调用Query对象的list等方法返回查询结果或执行更新、删除等操作。
Query接口及其常用方法
Query接口封装了对底层数据库表的查询请求
常用HQL语句
查询所有持久化对象
使用”from XXX”HQL语句可以查询所有持久化对象,此时查询结果是一个元素为持久化类类型的List或Ierator。
对查询结果排序
可以使用order by对查询结果设置按某个或某些成员属性升序(”ASC”)或降序(”DESC”)排列,默认为升序。
查询部分属性
HQL除了可以查询实体外,也可以查询成员属性,此时查询结果是一个元素为Object数组或对象类型的List或Ierator。
聚合查询
AVG():对指定属性求平均值。
SUM():对指定属性求总和,返回值类型为被求值的属性所对应的类型。
COUNT(*):统计实体数量。
MAX():求给定实体属性中的最大值。
MIN():求给定实体属性中的最小值。
排除相同记录的DISTINCT
查询时,有时会得到重复的查询内容,此时可使用distinct去除相同的内容而保留一份内容。
分组统计
可以将聚合函数和group by及having结合起来在分组中进行统计
关联查询
在HQL中,支持以下几种关联:
inner join/join : 内连接
返回两个关联实体中具有关联的所有字段。
left outer join/left join:左外连接
返回对应内连接的所有对象及左边持久化类的末关联对象。
right outer join/right join:右外连接
返回对应内连接的所有对象及右边持久化类的末关联对象。
left outer/inner join fetch :
查询主对象的同时也查询被关联的对象。
where 子句
限定条件查询
范围条件查询
给定值列表条件查询
多(and)条件查询
或(or)条件查询
逻辑非条件查询
为空条件查询
模糊条件查询
使用参数占位符查询
范围查询
可以使用(not)between…and…查询某个属性值处于或不处于某个范围之间的实体或实体属性。
在给定值列表中查询
可以使用(not)in运算符在某个属性给定值列表中查找实体或实体属性
限定条件、and、or和逻辑非运算
模糊查询
可以使用like运算符进行模糊查询,”%”代表任意个字符,”_”代表一个字符
空值查询
可以使用is(not) null运算符来判断属性值是否为NULL
使用参数占位符
可以使用?和名称设置参数占位符实现动态设置参数
批量更新
在hibernate3.0之后,hibernate提供了更新HQL来直接更新一条或多条记录
批量删除
在hibernate3.0之后,hibernate提供了更新HQL来直接删除一条或多条记录