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

  1. hibernate框架学习之数据查询(HQL)helloworld

    package cn.itcast.h3.hql; import java.util.List; import org.hibernate.Query; import org.hibernate.Se ...

  2. hibernate框架学习之数据查询(QBC)helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Criteria; import org.hib ...

  3. hibernate框架学习之数据查询(QBC)

    lQBC(Query By Criteria)是一种Hibernate中使用面向对象的格式进行查询的计数 lQBC查询方式步骤 •获取Session对象 •初始化Criteria对象(使用Sessio ...

  4. hibernate框架学习之数据查询(本地SQL)

    本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...

  5. hibernate框架学习笔记7:HQL查询、Criteria查询简介

    HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...

  6. hibernate框架学习之数据抓取(加载)策略

    Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...

  7. hibernate框架学习笔记10:HQL查询详解

    HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...

  8. hibernate框架学习之数据抓取(加载)策略helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...

  9. Hibernate框架学习(五)——批量查询(概述)

    一.HQL查询(Hibernate Query Language)多表查询,但不复杂时使用 Hibernate独家查询语言,属于面向对象的查询语言 1.基本查询 2.条件查询 注意:HQL语句中不可能 ...

随机推荐

  1. HTML5 离线缓存Appcache

    创建一个和html同名的manifest文件,比如页面为index.html,那么可以建一个index.manifest的文件,然后给index.html的html标签添加如下属性即可: <ht ...

  2. bzoj千题计划324:bzoj5249: [2018多省省队联测]IIIDX(线段树)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5249 把树建出来 如果所有的d互不相同,后续遍历即可 现在有的d相同 将d从小到大排序,考虑如何将 ...

  3. 使用sort函数进行排序

    介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...

  4. logging 模块 与 logging 固定模块

    import logging # 1. 控制日志级别# 2. 控制日志格式# 3. 控制输出的目标为文件logging.basicConfig(filename='access.log', forma ...

  5. vertica系列:时间相关函数

    -- * 注意: 本文的SQL是在 2017-09-14 测试的. 所以如果取当前日期, 结果为 2017-09-14* ------------------------------ 相关数据类型 - ...

  6. 【python小练】0020

    第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年1 ...

  7. ue4 笔记

    关卡场景内的模型在运行中,改变构建脚本后无法立即更新模型骨骼中心点碰到物理边缘 physcX会出问题 bug 纹理启用碰撞会与碰撞顶点冲突 造成效果不正确 IsInGameThread() 渲染时 会 ...

  8. npm 切换源 nrm

    版权声明:欢迎转载,请附加转载来源:一路博客(http://www.16boke.com) 转载 http://blog.csdn.net/wyc_cs/article/details/5155925 ...

  9. NEX 事件

    我正在上班突然看到这个事情差点没笑抽. 转自纯洁的微笑:原文在此:http://www.cnblogs.com/ityouknow/p/9247842.html#4010697 大家知道 VIVO 上 ...

  10. Hbase配置WEB UI界面

    1 找到各个节点下面的Hbase-site.xml文件,添加如下配置 <property> <name>hbase.master.info.port</name> ...