一、支持的查询方式

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. elementUI slider组件,带范围选择实现双向绑定

    网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先 ...

  2. Vue第三方库与插件实战手册

    title: Vue第三方库与插件实战手册 date: 2024/6/8 updated: 2024/6/8 excerpt: 这篇文章介绍了如何在Vue框架中实现数据的高效验证与处理,以及如何集成E ...

  3. Mysql性能优化(详解)

    引言 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操 ...

  4. C++11智能指针 unique_ptr、shared_ptr、weak_ptr与定制删除器

    目录 智能指针 场景引入 - 为什么需要智能指针? 内存泄漏 什么是内存泄漏 内存泄漏的危害 内存泄漏分类 如何避免内存泄漏 智能指针的使用及原理 RAII 简易例程 智能指针的原理 智能指针的拷贝问 ...

  5. [golang]在Gin框架中使用JWT鉴权

    什么是JWT JWT,全称 JSON Web Token,是一种开放标准(RFC 7519),用于安全地在双方之间传递信息.尤其适用于身份验证和授权场景.JWT 的设计允许信息在各方之间安全地. co ...

  6. 韦东山freeRTOS系列教程之【第七章】互斥量(mutex)

    目录 系列教程总目录 概述 7.1 互斥量的使用场合 7.2 互斥量函数 7.2.1 创建 7.2.2 其他函数 7.3 示例15: 互斥量基本使用 7.4 示例16: 谁上锁就由谁解锁? 7.5 示 ...

  7. The Beauty of Physics

    绪言/1 学物理的人用不着对物理方程的意义操心,只要关心物理方程的美就够了. --狄拉克 此曲只应天上有--开普勒的和谐宇宙/11 天体的运动只不过是某种永恒的复调音乐而已,要用才智而不是耳朵来倾听. ...

  8. 如何合理开发Java接口(安全性,可重复调用,稳定性,追溯性)

    一.接口开发规范 签名:对外提供的接口要做签名认证,认证不通过的请求不允许访问接口.提供服务. 加密:敏感数据在网络传输过程中应该加密. IP白名单:限制请求的IP,增加IP白名单,一般在网关层处理. ...

  9. javascript的内存(垃圾)回收机制?

    垃圾回收机制 1.js中的内存回收 在js中,垃圾回收器每隔一段时间就会找出那些不再使用的数据,并释放其所占用的内存空间. 以全局变量和局部变量来说,函数中的局部变量在函数执行结束后这些变量已经不再被 ...

  10. 为什么js中要用new?

    你new的不是对象,是构造函数,new + 构造函数生成对象.如果单就调用方法而言,确实不必用new.new一般用在"js使用原型和this关键字实现面向对象"的过程中. 大多数情 ...