一、支持的查询方式

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. js布尔类型

        <!-- 禁用 -->     <input type="text" disabled>       <!-- 只读 -->     & ...

  2. 剑指Offer-59.按之字形顺序打印二叉树(C++/Java)

    题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 分析: 实际上是二叉树的层次遍历,只不过每一行 ...

  3. 搜狗五笔 date 自定义时间格式

    搜狗五笔 date 自定义时间格式 搜狗五笔 date 默认打出的是"2023-6-15",如果需要"2023-06-15",则需要在自定义短语中设置 属性设置 ...

  4. 你唯一需要的是“Wide Events”,而非“Metrics、Logs、Traces”

    Charity Majors 的这句话可能是对科技行业当前可观察性状态的最好总结--完全的.大规模的混乱.大家都很困惑.什么是 trace?什么是 span?一行日志就是一个 span 吗?如果我有日 ...

  5. redis数据类型篇

    redis数据类型官网资料,https://redis.io/docs/manual/data-types/ 生产环境下的redis实况图 超哥这个redis实例里,db0库有140万个key. 1. ...

  6. nordic—RTC+PPI定时驱动某外设做非单次触发(本次测试为驱动GPIO口做电平翻转)

    简介:在nordic的开发中使用到RTC时,对于比较通道0/1/2/3的中断来说,如果不进行相关配置(如SDK中例子,使用的RTC比较通道就只能触发一次,不能多次触发),会导致比较中断只进入一次,如果 ...

  7. MySQL查询关于区分字母大小写问题

    前段时间在工作中测试提出了一个BUG,让我把根据ID查询区分大小写的功能去掉,大小写都随便查,然后我在SQL的位置加上了UPPER(id) = UPPER(#{id})的写法,而同事知道这个问题后的反 ...

  8. 面试官:transient关键字修饰的变量当真不可序列化?我:烦请先生教我!

    一.写在开头 在这篇文章中记录一下之前自己面试时学到的东西,是关于transient关键字的,当时面试官问我IO的相关问题,基本上全答出来了,关于如何不序列化对象中某个字段时,我果断的选择了stati ...

  9. 海思SDK 学习 :002-实例代码分析

    背景 需要了解 海思HI35xx平台软件开发快速入门之背景知识,为了方便测试,还需要了解 海思SDK 的安装 知识 由于海思的应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作.同理,应用 ...

  10. IOS浏览器返回刷新页面

    $(function () { var isPageHide = false; window.addEventListener('pageshow', function () { if (isPage ...