【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语句
【Hibernate】Re01.6 HQL的更多相关文章
- 【Hibernate】Hibernate的多表查询
在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...
- 【hibernate】映射继承关系
[hibernate]映射继承关系 转载:https://www.cnblogs.com/yangchongxing/p/10405151.html ========================= ...
- 【hibernate】自定义转换器
[hibernate]自定义转换器 转载:https://www.cnblogs.com/yangchongxing/p/10398255.html 1.转换基本属性 package cn.ycx.s ...
- 【hibernate】存储图片
[hibernate]存储图片 转载: package cn.ycx.study.hibernate.entity; import javax.persistence.Entity; import j ...
- 【hibernate】映射可嵌入式组件
[hibernate]映射可嵌入式组件 转载:https://www.cnblogs.com/yangchongxing/p/10376452.html 可嵌入 Address 类,没有对应的数据表 ...
- 【hibernate】应用程序级别的视图
[hibernate]应用程序级别的视图 转载:https://www.cnblogs.com/yangchongxing/p/10361281.html 在没有数据库修改权限时,像创建视图可以使用 ...
- 【hibernate】重写物理表名和列明
[hibernate]重写物理表名和列明 转载:https://www.cnblogs.com/yangchongxing/p/10357123.html 假设你的数据库命名有这样的需求,表都以 yc ...
- 【hibernate】常用注解
[hibernate]常用注解 转载:https://www.cnblogs.com/yangchongxing/p/10357118.html 目录 ======================== ...
- 【hibernate】hibernate不同版本的命名策略
===================================================hibernate 4命名策略如下================================ ...
- 【Hibernate】Hibernate系列6之HQL查询
HQL查询 6.1.概述 6.2.分页查询 6.3.命名查询 6.4.投影查询-部分字段查询 6.5.报表查询 6.6.迫切左外连接.左外连接 6.7.迫切内连接.内连接 6.8.QBC查询.本地查询
随机推荐
- C# || 批量翻译工具 || 百度翻译api || 读取.cs文件内容 || 正则表达式筛选文件
背景: 我们项目一开始的所有提示都是中文,后来要做国际化.发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲哭无泪... 如果使用人工改的话,首先不说正确率了.光是效率都是难难难.所以 ...
- sql数据的查询
数据的查询操作 子查询 联合查询 多表查收等等 基本查询 模糊查询 分组查询 子查询 基本查询语句 查询表结构中所有字段 ...
- ABC337
E 其实就是构造出最小的方案. 我们把二进制第 \(i\) 为 \(1\) 的所有数放到一起查询. 所以如果第 \(i\) 次询问的回答是 \(1\) 那么有问题的饮料二进制下的第 \(i\) 为就是 ...
- C#.NET ASP.NET IIS 加载.pfx私钥证书时报错“出现了内部错误。”
C#.NET ASP.NET IIS 加载.pfx私钥证书时报错"出现了内部错误." 原始代码报错: X509Certificate2 x509cer = new X509Cert ...
- 第三届机器人、人工智能与信息工程国际学术会议(RAIIE 2024)
[ACM独立出版/Fellow大咖云集]2024年第二届机器人.人工智能与信息工程国际学术会议(RAIIE 2024) 2024 3rd International Symposium on Robo ...
- Nivdia向量数据库图检索最新标杆——CAGRA
本文连接:https://wanger-sjtu.github.io/CARGA/ CAGRA 是 N社在RAFT项目中 最新的 ANN 向量索引.这是一种高性能的. GPU 加速的.基于图的方法,尤 ...
- Exception:kylin构建cube, Cannot modify mapReduce.queue.name at runtime
Failed to open new session: java.lang.IllegalArgumentException: Cannot modify tez.queue.name at runt ...
- Python使用Argparse读取命令参数
python编写的脚本需要通过命令参数来做一些参数配置.本文将介绍如何使用argparse来解析命令行参数.这种方法相对于sys.args的方式会简单很多. 通过以下的脚本来构建一个简单的配置解析器, ...
- P3749 题解
既然是求最大值而且有收益有代价,所以考虑建立一个最大权封闭子图模型. 收益 正的美味值是收益,所以假若 \(d_{i,j} \geq 0\) 则建边 \((s,pos_{i,j},d_{i,j})\) ...
- css 手稿
CSS 网页的布局和外观的显示样式 没有一张图解决不了的事:https://www.processon.com/mindmap/5e368a8be4b0d27af184e118 选择器 * 通配符选择 ...