【Hibernate】Re01.6 HQL
一、支持的查询方式
Hibernate的查询支持三种方式:
1、HQL查询 2、Criteria查询 3、NativeSQL 原生SQL查询
二、HQL查询语言
全称 Hibernate Query Language,是一种面向对象的查询语言
不存在表,字段的概念,只有类和属性的概念,并且Criteria查询也是基于HQL实现的
三、HQL基础语法
[SELECT 别名.属性名] FROM 类名 [AS 别名] [WHERE 查询条件]
如果查询全部可以不需要前面的SELECT语句:
FROM 类名
WHERE条件一般使用指定具体的字段和匹配的值
WHERE 类的别名.属性名 = 值
详细的条件参考地址:
http://blog.sina.com.cn/s/blog_6927adc10100tikv.html
基本的算术运算:
+、-、*、/、
且或非
AND | OR | NOT
或者非空判断:
1、WHERE 别名.属性名 IS NULL 2、WHERE 别名.属性名 IS NOT NULL
非空字符串判断:
1、WHERE 别名.属性名 IS EMPTY 2、WHERE 别名.属性名 IS NOT EMPTY
Member Of ?
MEMBER OF & NOT MEMBER OF
Hibernate还提供了相关的表达式,可以处理更为复杂的条件
LOWER(string param) UPPER(string param) YEAR(date param) .....
详细介绍在hibernate-distrbution文件的documentation\manual\zh-CN\pdf目录中查看
四、HQL参数注入
创建HQL查询对象:
一般非固定参数的注入方式,即字符串拼接处理:
当然,HQL也提供了对应的参数注入方式:
所以Hibernate可以对参数注入进行一个遍历的封装:
五、连接查询
1、内连接 FROM xxx.domain.DomainClass [AS dc] [INNER] JOIN [FETCH] dc.property 2、外连接 FROM xxx.domain.DomainClass [AS dc] LEFT [OUTER] JOIN [FETCH] dc.property 3、等值链接 FROM xxx.domain.DomainClass1 AS dc1, xxx.domain.DomainClass2 AS dc2 WHERE dc1 = dc2.dc1 4、隐式内连接 FROM xxx.domain.DomainClass1 AS dc1 WHERE dc1.dc2.property = ?
6、聚合函数
1、求最大值 MAX(property-param) 2、求最小值 MIN(property-param) 3、求平均值 AVG(property-param) 4、求和 SUM(property-param) 5、计数 COUNT(property-param)
另外还可以结合Object数组的形式和UniqueResult返回上述的结果:
7、分组查询
分组查询的结果并不是按照通常的映射对象结果来处理,也就不存在映射关系
一般的处理是使用List<Obejct[ ]>,和普通SQL相似,这里不再赘述了
8、子查询
对于子查询,HQL提供了几个关键字可以对子查询的结果进行量化处理
1、ALL 子查询的所有记录 2、ANY 子查询的任意记录 3、SOME 子查询的任意记录 4、IN 子查询的任意记录 5、EXISTS 至少返回一条记录
9、集合函数与属性
1、获取集合元素数量,或者称为集合长度 size() 2、获取最小索引,也就是起始索引? minIndex() 3、获取最大索引,也就是结尾索引? maxIndex() 4、最小元素 minElement() 5、最大元素 maxElement() 6、获取所有元素 elements()
在对关联映射的子查询中是非常好用的,可以省略书写大部分的HQL语句