【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

或者非空判断:

1WHERE 别名.属性名 IS NULL

2WHERE 别名.属性名 IS NOT NULL

非空字符串判断:

1WHERE 别名.属性名 IS EMPTY

2WHERE 别名.属性名 IS NOT EMPTY

Member Of ?

MEMBER OF
&
NOT MEMBER OF

Hibernate还提供了相关的表达式,可以处理更为复杂的条件

LOWER(string param)

UPPER(string param)

YEAR(date param)

.....

详细介绍在hibernate-distrbution文件的documentationmanualzh-CNpdf目录中查看

四、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提供了几个关键字可以对子查询的结果进行量化处理

1ALL       子查询的所有记录
2ANY       子查询的任意记录
3SOME      子查询的任意记录
4IN        子查询的任意记录
5EXISTS    至少返回一条记录

9、集合函数与属性

1、获取集合元素数量,或者称为集合长度  size()
2、获取最小索引,也就是起始索引?     minIndex()
3、获取最大索引,也就是结尾索引?     maxIndex()
4、最小元素                minElement()
5、最大元素                maxElement()
6、获取所有元素              elements()

在对关联映射的子查询中是非常好用的,可以省略书写大部分的HQL语句

原文地址:https://www.cnblogs.com/mindzone/p/13735825.html