JavaEE轻量级框架开发实用教程 课件 【ch05】Hibernate查询语言_第1页
JavaEE轻量级框架开发实用教程 课件 【ch05】Hibernate查询语言_第2页
JavaEE轻量级框架开发实用教程 课件 【ch05】Hibernate查询语言_第3页
JavaEE轻量级框架开发实用教程 课件 【ch05】Hibernate查询语言_第4页
JavaEE轻量级框架开发实用教程 课件 【ch05】Hibernate查询语言_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hibernate查询语言“普通高等教育“十三五”规划教材高等学校计算机规划教材JavaEE轻量级框架开发实用教程第五章在项目开发中,对数据进行最多的操作是查询操作,在JDBC(JavaDataBaseConnectivity,Java数据库连接)中,实现查询操作的代码比较复杂、容易出错。Hibemate框架对JDBC进行了封装,支持强大且易于使用的HQL,实现方便的数据查询操作。另外,Hibernate框架也支持原生的SQL语句,虽然这种方式不是很常用。本章将详细介绍HQL(HibemateQueryLanguage,Hibernate查询语言),并简单介绍原生的SQL语句的查询方式。Hibernate查询语言01HQLHQLHQL是一种完全面向对象的查询语言,操作的对象是类、实例、属性等,支持继承和多态等特征。HQL在语句结构上很像SQL的语句结构,但二者存在着本质区别,SQL的操作对象是数据表和字段等,而HQL操作的对象是类、实例及其属性等,在执行过程中,Hibemate框架会根据映射文件的配置和数据库方言将HQL语句转换成可以在相应的数据库中执行的SQL语句。在Hibernate中,是通过Query接口来执行HQL查询的。通过Query对象,可以使用HQL来执行一系列的数据库操作,Query接口是Hibemate的查询接口,用于在数据库中查询对象,并控制执行查询的过程。Hibernate查询语言Hibernate查询语言方法作用setter方法Query接口提供了一系列的setter方法用于设置查询语句中的参数list。方法list。方法用于执行查询语句,并将査询结果以List类型返回iterator。方法iteratorO方法也用于执行查询语句,返回的结果是一个Iterator对象,在读取时只能按照顺序方式读取uniqiieResult()方法uniqueResult()方法用于返回唯一的结果,在确保最多只有一个记录满足查询条件的情况下可以使用该方法executeUpdate()方法executeUpdateQ方法是Hibernate3提供的新特性,可以使用它支持HQL语句的更新和删除操作,建议更新时釆用此方法setFirstResultO方法该方法可以设置所获取的第一个记录的位置,从0开始计算,用于筛选选取记录的范围setMaxResultsQ方法该方法设置结果集的最大记录数,可以与setFirstResultO方法结合使用,限制结果集的范围,在实现分页功能时非常有用Hibernate查询语言01020304Configurationcfg=newConfiguration;configure;SessionFactorysf=cfg.buildSessionFactory;Sessionsession=sf.openSession;获得SessionQueryquery=session.createQuery(hql);创建QueryListlist=query.list();HQL的主要作用是进行数据查询,但在Hibernate3之后,Hibernate框架对HQL的功能进行了扩展,它不仅可以进行数据查询,还可以进行更新和删除操作。而更新和删除主要借助executeUpdate()方法。执行查询,获得结果HQL查询语句查询的是类,以上面的这条语句为例,其中Qx表示Qx类,qxname表示Qx类中的属性。编写HQL02HQL常用查询操作单一属性查询所谓单一属性查询,指的是查询某类中的某个属性,查询结果为该属性的结果集列表,列表中的元素类型和实体类中该属性的类型一致。Hibernate查询语言多个属性查询所谓多个属性查询,指的是查询某类中多个属性,查询结果为对象数组列表,列表中的元素类型为对象数组,对象数组的长度取决于所要查询的属性的个数,对象数组中元素的类型取决于属性在实体类中的类型。Hibernate查询语言多个属性查询Hibernate查询语言0102(1)Stringhql="selecteid,enamefromEmployee";:本例中要查询的属性为eid和ename,因此,本例为多个属性查询的范畴。(2)Object[]einfb=(Object[])list.get(i);:列表中的元素类型为对象数组。对象查询上例中的多个属性查询的返回结果为对象数组的列表,操作起来非常不方便。HQL中还提供了一种返回结果为对象的查询,例如HQL语句:“firomEmployee”。这种查询语句书写简练,功能强大,返回的结果Employee对象,前提条件是Employee类中必须有一个无参数的构造方法。Hibernate查询语言无论是from子句还是select子句,都可以使用where子句得到条件查询的结果。所谓where直接查询指的是在where子句中直接写入参数值的方式。在where子句中,可以使用SQL语句中能够使用的大多数运算符和函数等来指定筛选条件,例如比较运算符和逻辑运算符。比较运算符有:=、<>、!=、>、<、>=、between、notbetween、in>notin>is、like、isnull等。逻辑运算符有:not>and、or等。where直接查询Hibernate查询语言HQL的where子句支持参数查询,可以通过传递参数的方式进行数据查询。HQL有两种参数传递形式:一种是位置占位符,另一种是名称占位符。where参数查询Hibernate查询语言多表连接查询HQL支持通过外键关联实现的连接查询,但不建议使用这种方式,HQL的连接查询可以通过配置两个类或多个类之间的关联映射关系来实现多表连接查询。Hibernate查询语言分页分页查询是数据库开发中常用的操作,对于JDBC数据库编程来说,不同的数据库的分页查询语句是不同的。例如,Oracle数据库需要使用rownum关键字,MySQL数据库需要使用limit关键字,而SQLServer数据库需要使用top关键字,Hibernate对JDBC数据库进行了封装,在分页操作上实现了统一。Hibernate的Query接口提供了两个方法以实现分页:setFirstResuit(int)设置第一条记录开始的位置,setMaxResults(int)设置返回的纪录总条数。Hibernate查询语言汇总HQL支持在查询的属性上使用汇总函数。这些汇总函数有:计算查询的属性的平均值函数avg(),计算查询的属性的总和函数sum(),返回查询的属性的最小值函数min(),返回查询的属性的最大值函数max(),统计查询对象的数量函数count()o通过Query接口的uniqueResult()函数来获得汇总函数的值。下面以计算员工表中记录总数为例进行举例说明。Hibernate查询语言03原生SQL查询0102031.类JDBC方式该方式是通过调用Session接口的connectionO方法,从而获得数据库连接,进而通过JDBC方式来实现对数据库的查询。例如,对Oracle存储过程的操作就可以使用这种方式。2.命名SQL查询Hibernate使用<sql-query.../>元素来配置命名SQL查询,配置<sql-query.../>元素有一个必填的name属性,该属性用于指定该命名SQL査询的名称。3.通过Session接口的createSqlQuery()方法对于一般的SQL语句,使用Session接口的createSqlQuery()方法来调用原生SQL语句是最简单的一种方式。使用该方法时,可以结合addEntityO方法来使用,这样可以返回对象列表。Hibernate查询语言程序说明:通过session.connection()方法建立数据库连接,接下来的操作就和JDBC方式完全一样了。因为Oracle数据库的存储过程的创建和MySQL等其他数据库不同,对Oracle存储过程的操作一般要釆用类JDBC方式。Hibernate查询语言在使用<sql-query.../>元素定义命名查询时,可以包含如下几个元素。(1)<retum.../>:将查询结果转换成持久化实体。(2)〈return-join.../>:预加载持久化实体的关联实体。(3)〈return-scalar.../>:将查询的数据列转换成标量值。Hibernate查询语言Hibernate查询语言04项目案例在线书城项目的主要功能模块可完成如下功能:浏览图书类别,浏览图书信息,浏览图书明细信息,浏览图书库存信息及图片,添加到购物车,查询图书信息,结账,确认付费细节及邮寄地址等。在这些功能中,大部分业务都是查询业务。在本章项目案例中,将在数据持久层对浏览图书信息、浏览图书明细信息、查询图书信息功能以HQL查询的方式加以实现。其中,浏览图书信息是对Product表的单表查询,浏览图书明细信息需要使用Product表和Item表的连接查询;查询图书信息则需要使用分页查询及汇总函数功能。另外,因为需要保障程序架构的完整性,以及需要为下面章节项目案例进行一些准备工作,所以本章除完成数据持久层的工作外,还要引入业务层并编写相关功能的业务层的代码。Hibernate查询语言1.数据持久层数据持久层是使用Dao模式来完成的,Dao模式的BaseDao可以参考第3章的项目案例,Dao模式中的实体类及映射文件可以参考第4章的项目案例,本章的数据持久层只需完成Dao接口和Dao接口实现类。1)浏览图书信息功能及查询图书信息功能浏览图书信息功能主要是对Product表的操作,该功能主要是通过“图书类别”来浏览图书信息的;而查询图书信息功能也是对Product表的操作,该功能主要根据“图书描述,来查询相关的图书,并实现分页浏览。因此,这两个功能的接口函数都可以写在接口ProductDao中。Hibernate查询语言Hibernate查询语言2)浏览图书明细信息功能实现该功能主要通过“图书编号”查找图书明细信息。涉及的表有Product表和Item表,需要对这两个表进行关联查询。在Hibernate部分,只要配置好这两个表的关联映射关系,关联查询就是一件非常简单的工作了,我们选定Item表对应的Item类作为“主”的一方,从Item类进行查询。Hibernate查询语言2.业务层Hibernate主要完成数据持久层的工作,因为在下一章中介绍表示层的内容,并且在三层架构中表示层调用业务层,业务层调用数据持久层,层和层之间是单向的调用关系,所以为了后续章节介绍方便,在本章的项目案例中将实现相关功能的业务层代码的编写。Hibernate查询语言Hibernate查询语言Hibernate查询语言程序说明:因为在业务层实现类中是通过调用数据持久层的方法来实现相关功能的,而在测试类的测试方法中是通过调用业务层的方法来实现测试的,所以测试类在这里充当的是表示层的角色。在本章的项目案例中,通过程序代码展现了三层架构的一般特点,即表示层调用业务层、业务层调用数据持久层,层和层之间是单向的调用关系。Hibernate查询语言5.4.3知识点总结在本章的项目案例中,运用本章的重点知识HQL实现了浏览图书信息、浏览图书明细信息、查询图书信息功能的数据持久层。在本案例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论