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. mysql的定时任务

    参考博客:https://blog.csdn.net/qq_26562641/article/details/53301407 查看event是否开启: show variables like '%s ...

  2. eclipse+tomcat+maven+springmvc+mybatis+mysql集成WebService插件(Axis2+CXF)

    $1 环境介绍 $1.1 Eclipse Java EE IDE for Web Developers:Neon.2 Release (4.6.2) $1.2 Maven:3.3.9 $1.3 Spr ...

  3. HDU 1036(平均速度 **)

    题意是求出跑了 n 圈每圈 m km 的个人的平均速度. 控制格式,特别注意,题意是输出 -:--:-- 的该人成绩作废,但要把他其他的成绩输进去,不能直接就 break ,输出也就只有一个 - ,而 ...

  4. 使用wget命令下载JDK失败(文件特别小)

    问题RT: 我们在网页上下载的时候要点一下 “Accept License Agreement ” ,使用wget下载的时候也需要提交这个 accept,方法如下: wget --no-check-c ...

  5. 对空间数据(Shape)重新排序

    打开ArcToolBox,数据管理工具->常规(General)->排序

  6. 使用JAVA数组实现顺序表

    1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象. 2,默认构造方法创建了一个默认大小为16的Object数组:带参数的构造方法创建一个指定长度的O ...

  7. JS创建对象之工厂模式

    function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = jo ...

  8. interactivePopGestureRecognizer --- iOS侧滑的问题

    苹果一直都在人机交互中尽力做到极致,在iOS7中,新增加了一个小小的功能,也就是这个api:self.navigationController.interactivePopGestureRecogni ...

  9. l类与对象课后作业

    java 的初始化规律 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行.因 ...

  10. 使用Hexo在github上搭建个人博客

    最近正好在学习前端开发,想着搭建一个属于自己的个人博客,把自己的技能树整理整理,温故而知新. 如果你有前端开发经验,那么搭建这样的博客就很简单了. 一 什么是Hexo     Hexo 是一个快速.简 ...