码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2018-07-22 23:35:10      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:提高   mode   执行   tco   rgb   基本数据   使用   技术分享   skill   

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)

标签:提高   mode   执行   tco   rgb   基本数据   使用   技术分享   skill   

原文地址:https://www.cnblogs.com/xyhero/p/9351647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!