一、支持的查询方式

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的更多相关文章

  1. 【Hibernate】Hibernate的多表查询

    在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...

  2. 【hibernate】映射继承关系

    [hibernate]映射继承关系 转载:https://www.cnblogs.com/yangchongxing/p/10405151.html ========================= ...

  3. 【hibernate】自定义转换器

    [hibernate]自定义转换器 转载:https://www.cnblogs.com/yangchongxing/p/10398255.html 1.转换基本属性 package cn.ycx.s ...

  4. 【hibernate】存储图片

    [hibernate]存储图片 转载: package cn.ycx.study.hibernate.entity; import javax.persistence.Entity; import j ...

  5. 【hibernate】映射可嵌入式组件

    [hibernate]映射可嵌入式组件 转载:https://www.cnblogs.com/yangchongxing/p/10376452.html 可嵌入 Address 类,没有对应的数据表 ...

  6. 【hibernate】应用程序级别的视图

    [hibernate]应用程序级别的视图 转载:https://www.cnblogs.com/yangchongxing/p/10361281.html 在没有数据库修改权限时,像创建视图可以使用 ...

  7. 【hibernate】重写物理表名和列明

    [hibernate]重写物理表名和列明 转载:https://www.cnblogs.com/yangchongxing/p/10357123.html 假设你的数据库命名有这样的需求,表都以 yc ...

  8. 【hibernate】常用注解

    [hibernate]常用注解 转载:https://www.cnblogs.com/yangchongxing/p/10357118.html 目录 ======================== ...

  9. 【hibernate】hibernate不同版本的命名策略

    ===================================================hibernate 4命名策略如下================================ ...

  10. 【Hibernate】Hibernate系列6之HQL查询

    HQL查询 6.1.概述 6.2.分页查询 6.3.命名查询 6.4.投影查询-部分字段查询 6.5.报表查询 6.6.迫切左外连接.左外连接 6.7.迫切内连接.内连接 6.8.QBC查询.本地查询

随机推荐

  1. 关于使用Gitlab CI-CD

    关于使用 Gitlab CI/CD 如果是个人建议自己写脚本,手动运行,而不是使用 Gitlab CI/CD. 免费的 Runner 需要 Credit Card!

  2. 1003 我要通过! PTA Basic Level

    我的个人博客 azoux's blog 题目 我要通过! (20 分) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 ...

  3. 前端React的事件机制

    前端React技术框架的事件机制不同于常见的事件机制--原生事件,此文将介绍React的事件机制是什么,与原生事件的区别,以及这两种事件机制是否可以混用等.希望您在阅读这篇文章之后,能够对React的 ...

  4. org.springframework.beans.BeanUtils属性赋值 Date类型处理转换为LocalDateTime, Date不能直接赋值给LocalDateTime

    Date createTime = book.getCreateTime(); Date updateTime = book.getUpdateTime(); //属性值处理 BeanUtils.co ...

  5. ITMS-90717: 无效的应用程序商店图标

    PS导入照片 图像->模式->索引颜色 透明度去掉打勾保存即可

  6. Pytorch复制现有环境

    一,在本机上,打开anaconda Prompt直接使用 conda create -n 新环境名 --clone 旧环境名

  7. XIP技术与Flash

    XIP技术与Flash 参考: 串行NAND Flash的两大特性导致其在i.MXRT FLASH控制器下无法XiP norflash芯片内执行(XIP) NOR Flash 和 NAND Flash ...

  8. Android 各层架构

    Android应用框架层和硬件抽象层以及底层之间的关系 1. JNI技术: (1).JNI技术简单的说就是在本地Java语言声明本地方法和加载动态链接库(.so文件) (2).动态链接库(.so文件) ...

  9. Python_9 py文件导入和路径处理

    一.查缺补漏 Python中两个值交换可以直接交换如:a,b=b,a 冒泡就是从小到大排序,因为越到后越大 自动导包也适用于自己创建的模块 关于正斜杠和反斜杠https://www.cnblogs.c ...

  10. Linux上快速安装 RabbitMQ

    1.默认安装最新版,安装erlang apt-get install erlang 2.安装最新版 rabbitmq sudo apt-get update sudo apt-get install ...