【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查询.本地查询
随机推荐
- 基于Vue的二进制时钟组件 -- fx67llBinaryClock
fx67llClock Easy & Good Clock ! npm 组件说明 一个基于Vue的二进制时钟组件,没什么卵用,做着好玩,可以方便您装饰个人主页 使用步骤 npm install ...
- mac home目录下无法mkdir目录及文件的解决方法
主要参考以下几篇文章 https://www.cnblogs.com/zhangbao3/p/12600058.html https://www.v2ex.com/t/607387 https://w ...
- UDP端口探活的那些细节
一 背景 商业客户反馈用categraf的net_response插件配置了udp探测, 遇到报错了,如图 udp是无连接的,无法用建立连接的形式判断端口. 插件最初的设计是需要配置udp的发送字符 ...
- 三月十五号 anaconda 安装 tensorflow 教程
今天下载anaconda 并安装tensorflow 首先下载anaconda 因为官网下载特别慢 所有选择国内镜像网站 https://mirrors.tuna.tsinghua.edu.cn/a ...
- Java JSON组成和解析
本框架JSON元素组成和分析,JsonElement分三大类型JsonArray,JsonObject,JsonString. JsonArray:数组和Collection子类,指定数组的话,使用A ...
- Unity UI优化
UI优化 动静分离.拆分UI.预加载.字体拆分.滚屏优化.网格重构优化.展示关闭优化.对象池.贴图优化.图集拼接优化.UI业务逻辑中GC优化等. 一.动静分离 ** 问题:**unity中UGUI系统 ...
- tempcode排序
package com.hsy;import com.alibaba.fastjson.JSON;import org.springframework.util.CollectionUtils;imp ...
- Fastjson基础环境配置与Java基础概念
Preface 此篇系列文章将会从 Java 的基础语法开始,以 Fastjson 的各个反序列化漏洞分析为结尾,详细记录如何从一个具有基础面向对象编程但毫无 Java 基础的小白成长为了解 Fast ...
- Pytest 失败重运行
需安装第三方插件:pytest-rerun.pytest-rerunfailures 失败重试和失败重运行的区别 失败重试:[--reruns=1],用例执行失败后,会立即开始重试一次此用例,再执行下 ...
- 同时开启firewall和iptables
使用向导 With the iptables service, every single change means flushing all the old rules and reading all ...