hibernate框架学习之数据查询(HQL)
lHibernate共提供5种查询方式
•OID数据查询方式
•HQL数据查询方式
•QBC数据查询方式
•本地SQL查询方式
•OGN数据查询方式
OID数据查询方式
l前提:已经获取到了对象的OID
l查询:基于OID,使用get/load方法查询对应的数据
l作用:使用OID获取对应的数据
HQL数据查询方式
l前提:已知要进行查询的数据结构和条件
l查询:基于Query对象,完成HQL语句的查询,得 到查询结果
l作用:基于HQL语法规则,查询对应的数据
QBC数据查询方式
l前提:已知要进行查询的数据结构和条件
l查询:基于Criteria对象,完成面向对象的查询,得 到查询结果
l作用:基于面向对象的规则,查询对应的数据
本地SQL查询方式
l前提:已知要进行查询的数据结构和条件
l查询:基于SQL语句,完成查询,得到查询结果
l作用:基于SQL语法规则,查询对应的数据
OGN查询方式
l前提:已经获取到某个查询对象(PO)
l查询:使用已检索到的对象(PO),导航到其中包含 的其他数据
l作用:使用已加载对象,查询其中关联的所有其他 对象数据
HQL查询方式
lHQL查询方式是通过HQL语句进行查询
lHQL(Hibernate Query Language)是一种Hibernate专用的查询语句,基于面向对象的模式,将SQL语句转化成对象的操作格式
lHQL查询方式步骤
•获取Session对象
•编写HQL语句(满足HQL语法规则)
•初始化Query对象(使用Session对象创建,传入HQL参数)
•初始化Query参数(如果需要)
•执行查询返回结果(返回单条数据或集合数据)
HQL——简单查询
lHQL书写查询语句时,如果只进行一张表对应的查询,且查询数据为全部数据时,可以使用ORM中的对象名表示表名,查询内容可以省略
•实际开发中,几乎不存在上述操作,SQL语句的编写需要考虑运行效率,通常会为某些属性添加索引,提高查询性能
HQL——链式格式
lHQL书写时代码很多,可以通过单条语句完成,这就是HQL查询的链式格式
l链式格式远远强大于上面的形式,在HQL条件查询和QBC条件查询时更为强大,但是仅仅是一个格式的变化,无需过于关注。
HQL——获取数据(返回对象)
l查询内容:单个属性或对象
l查询结果:0到多条数据
l使用Query对象提供的list()完成数据的获取,获取后得到一个List集合。List中单条数据封装的是该数据对应的对象,可以是任意类型
l案例:
•"from TeacherModel"
•返回TeacherModel类的对象
•“select age from StudentModel“
•返回StudentModel类age属性的对象,该对象类型Integer
HQL——获取数据(返回对象)
HQL——使用别名
lHQL书写过程中,如果类名过长,或者属性名过长,可以通过别名的方式简化书写,同时可以描述查询的结果为对象类型
l别名使用规则与SQL完全相同,as可以省略
l“select tm.nick from TeacherModel tm” (正确)
HQL——获取数据(返回对象数组)
l查询内容:多个属性或对象
l查询结果:0到多条数据
l使用Query对象提供的list()完成数据的获取,获取后得到一个List集合。 List中单条数据封装的对象数组,该数组中按照先后顺序封装了所有查询结果
l案例:
•"select teacherName,nick from TeacherModel"
•返回TeacherModel类的teacherName和nick属性
•“select skill,age from StudentModel“
•返回StudentModel类的skill和age和属性
l查询的数据内容超过一个,就无法封装成对象,因此封装成了一个对象数组,对象数组中的数据数量取决于查询时要查询的字段/属性数量,其中可以使用对象与属性的格式混用
l上述查询中查询的第一个数据是属性,第二个数据是一个对象,这种格式也是被允许的。
l如果查询的多个数据结果可以包装成一个对象,可以使用投影技术将其进行封装,后面详细解释。
HQL——获取数据(返回对象)
l查询内容:不限
l查询结果:0到1条数据
l使用Query对象提供的uniqueResult() 完成数据的获取,获取后得到一个对象。与list()的区别是本操作只能用于获取查询结果为0到1条的数据,如果查询结果超过1条,程序将抛出查询结果不唯一异常
l案例:
•"from TeacherModel where uuid = 1"
•返回TeacherModel类的uuid为1的对象,最多一条
luniqueResult方法通常用于执行查询聚合函数
HQL——聚合函数的使用规则
l聚合函数是SQL语言中提供一种快速进行数据统计操作的内置函数
lHibernate兼容使用SQL语句中的如下聚合函数
•count()
•min()
•max()
•sum()
•avg()
l格式:
•“select count(uuid) from TeacherModel”
lcount函数返回的结果必须使用Long型数据接收
l其他函数则要根据具体操作的数据类型进行选择,例如上例中的age需要使用Integer类型接收
HQL——分页查询
lHQL查询中分页不再交由用户手工进行,可以使用Query对象提供的方法完成
•setFirstResult(int);
•setMaxResults(int);
l上述两个方法返回值为原始调用对象Query对象,因此支持链式格式
HQL——条件查询
l条件查询是实际应用中最常见的操作,几乎不存在不携带条件,将全表数据查询的现象
lHQL条件查询分为三种格式
•无参数条件查询
•固定参数查询
•动态参数条件查询
HQL——索引格式动态绑定参数
l如果预知传入的参数类型,使用set类型名称()完成参数的传递(常用)
•查询所有30岁以上的Java编程人员
l使用索引格式传参,对应的HQL语句中的参数位置发生变化,设置参数代码仍需维护,不推荐使用。
l在使用参数设定时,参数只能赋值给指定的查询属性名称,如果参数的属性不是基本数据类型的封装类,此时需要使用实体进行赋值
•查询编号为1的老师的所有学生
l使用对象遍历的格式可以完成上述操作
l使用传递对象参数的格式完成
•查询编号为1的老师的所有学生
setEntity方法可以完成对象参数的传递
setEntity方法要求传入的参数必须是PO或DO
HQL——名称格式动态绑定参数
l使用索引的格式匹配参数不够灵活,维护难度高,HQL还支持定义临时的变量名称指定参数(推荐使用)
l使用名称与索引都可以完成对应的功能,传递参数时三种参数赋值格式都适用(param,类型,实体)
HQL——条件查询(链式风格)
l条件查询支持链式风格
lQuery对象的操作如果返回结果为Query类型,那么该操作就支持链式风格书写
HQL——投影模式查询
l普通查询设置查询内容
•查询单个属性或者对象,则返回对象集合
•查询多个属性或对象的组合格式,返回对象数组
l获取所有学生的姓名和年龄
l投影查询的作用是可以将查询的数据进行封装
•将查询结果封装成对象
•将查询结果封装成集合
l利用构造方法将查询结果封装成对象
•要求对应的PO类中提供对应的构造方法
•可以为PO类提供各式各样的构造方法,适应各种各样的投影
•投影格式较灵活,前提是定义多种构造方法(无参构造方法)
HQL——多表关联查询

hibernate框架学习之数据查询(HQL)的更多相关文章
- hibernate框架学习之数据查询(HQL)helloworld
package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...
- hibernate框架学习之数据查询(QBC)helloworld
package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...
- hibernate框架学习之数据查询(QBC)
lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...
- hibernate框架学习之数据查询(本地SQL)
本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- hibernate框架学习笔记10:HQL查询详解
HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...
- hibernate框架学习之数据抓取(加载)策略helloworld
package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...
- Hibernate框架学习(五)——批量查询(概述)
一.HQL查询(Hibernate Query Language)多表查询,但不复杂时使用 Hibernate独家查询语言,属于面向对象的查询语言 1.基本查询 2.条件查询 注意:HQL语句中不可能 ...
随机推荐
- HTML5 离线缓存Appcache
创建一个和html同名的manifest文件,比如页面为index.html,那么可以建一个index.manifest的文件,然后给index.html的html标签添加如下属性即可: <ht ...
- bzoj千题计划324:bzoj5249: [2018多省省队联测]IIIDX(线段树)
https://www.lydsy.com/JudgeOnline/problem.php?id=5249 把树建出来 如果所有的d互不相同,后续遍历即可 现在有的d相同 将d从小到大排序,考虑如何将 ...
- 使用sort函数进行排序
介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...
- logging 模块 与 logging 固定模块
import logging # 1. 控制日志级别# 2. 控制日志格式# 3. 控制输出的目标为文件logging.basicConfig(filename='access.log', forma ...
- vertica系列:时间相关函数
-- * 注意: 本文的SQL是在 2017-09-14 测试的. 所以如果取当前日期, 结果为 2017-09-14* ------------------------------ 相关数据类型 - ...
- 【python小练】0020
第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年1 ...
- ue4 笔记
关卡场景内的模型在运行中,改变构建脚本后无法立即更新模型骨骼中心点碰到物理边缘 physcX会出问题 bug 纹理启用碰撞会与碰撞顶点冲突 造成效果不正确 IsInGameThread() 渲染时 会 ...
- npm 切换源 nrm
版权声明:欢迎转载,请附加转载来源:一路博客(http://www.16boke.com) 转载 http://blog.csdn.net/wyc_cs/article/details/5155925 ...
- NEX 事件
我正在上班突然看到这个事情差点没笑抽. 转自纯洁的微笑:原文在此:http://www.cnblogs.com/ityouknow/p/9247842.html#4010697 大家知道 VIVO 上 ...
- Hbase配置WEB UI界面
1 找到各个节点下面的Hbase-site.xml文件,添加如下配置 <property> <name>hbase.master.info.port</name> ...