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. python数据结构总结

    一.列表 1.列表脚本操作符: (1)扩增的操作符: “+”:用于组合列表:如[1,2,3]+[4,5,6]==>[1,2,3,4,5,6] "*":重复;如[2,3]*2= ...

  2. 详解Linux内核红黑树算法的实现

    转自:https://blog.csdn.net/npy_lp/article/details/7420689 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文& ...

  3. Swagger入门

    新手入门Swagger看了很多博客,竟然没有一个是步骤齐全的或直接能运行的.于是CSDN下载了SSM+Swagger整合的demo,一顿瞎整,终于可以运行了. 不容易,因此分享这篇博客,祝新手朋友们早 ...

  4. Linux 命令详解(十二)Systemd 入门教程:使用定时器发送邮件(mail)

    Systemd 定时器教程:http://www.ruanyifeng.com/blog/2018/03/systemd-timer.html 一.定时任务 Systemd 定时任务:每小时发送一封电 ...

  5. 01-maya基础

    maya基础 1,ctrl shift m 切换面板工具栏. 2,空格键+ 右键 :快速的切换视图. 3,在一视图上单击空格键,可放大显示. 4, 工程的创建 1,创建工程:文件--项目窗口,建完后, ...

  6. HTTP method constants

    HTTP method constants ngx.HTTP_GET ngx.HTTP_HEAD ngx.HTTP_PUT ngx.HTTP_POST ngx.HTTP_DELETE ngx.HTTP ...

  7. 细说shiro之四:在web应用中使用shiro

    官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...

  8. VS下个人认为比较实用的插件

    懒得打字了,直接贴图

  9. 求f(n)=[n/1]+[n/2]+---+[n/n]的值 简单杂题

    这种小题首先根据 n/1+n/2+n/3+--+n/n=nlogn+欧拉常数r 可以知道 1e12的范围也不会爆longlong,不需要写高精度(到现在都不会写) 再根据数据范围可知O(n)级别的暴力 ...

  10. Django REST Framework API Guide 04

    本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...