多级查询在资产管理系统中的设计与实现毕业论文.doc

上传人:椰子壳 文档编号:3923539 上传时间:2019-10-10 格式:DOC 页数:38 大小:221.50KB
返回 下载 相关 举报
多级查询在资产管理系统中的设计与实现毕业论文.doc_第1页
第1页 / 共38页
多级查询在资产管理系统中的设计与实现毕业论文.doc_第2页
第2页 / 共38页
多级查询在资产管理系统中的设计与实现毕业论文.doc_第3页
第3页 / 共38页
多级查询在资产管理系统中的设计与实现毕业论文.doc_第4页
第4页 / 共38页
多级查询在资产管理系统中的设计与实现毕业论文.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《多级查询在资产管理系统中的设计与实现毕业论文.doc》由会员分享,可在线阅读,更多相关《多级查询在资产管理系统中的设计与实现毕业论文.doc(38页珍藏版)》请在三一文库上搜索。

1、学号 200532580294 密级 武汉大学本科毕业论文 Asset Management System多级查询在资产管理系统中的设计与实现院(系)名 称:国际软件学院专 业 名 称 :软件工程学 生 姓 名 :董李曦指 导 教 师 :熊庆文 廖广志教授 二九年五月BACHELORS DEGREE THESIS OF WUHAN UNIVERSITYMulti-level inquiry in the Asset Management System Design and ImplementationCollege : International School of SoftwareSubje

2、ct : Software EngineeringName : DongLixiDirected by : XiongQingwen,LiaoGuangzhi ProfessorMay 2009郑 重 声 明本人呈交的学位论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的内容外,本学位论文的研究成果不包含他人享有著作权的内容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本学位论文的知识产权归属于培养单位。本人签名: 董李曦 日期: 摘 要固定资产管理(以下简称资产管理)是企业重要的经济资源和赖以生存

3、发展的物质基础。如何确保对企业固定资产进行科学管理,健全各项资产管理制度,提高企业的市场竞争力,构建一套企业资产管理系统是十分必要的。目前管理信息系统的开发与设计主要采用面向对象的方法。第一章主要讲的是研究背景;第二章主要讲的是多级查询的实现方法,包括AJAX技术和Hibernate技术。第三章主要讲的是多级查询在资产管理中的实现,主要采用的是AJAX技术。 关键词:资产管理;多级查询;数据库ABSTRACTEnterprise Assets Management (hereinafter referred to as asset management) is an important eco

4、nomic resources and rely on the material basis for survival and development. How to ensure that the fixed assets of enterprises to carry out scientific management, improve the asset management system to improve the market competitiveness of enterprises, to build an enterprise asset management system

5、 is essential. Current management information system development and design almost use the main object-oriented method.The first chapter is mainly about research background; The second chapter is mainly about the realization of multi-level inquiries, including technical and Hibernate technology AJAX

6、. The third chapter consists mainly of talking about multi-level inquiry in the asset management in the realization of the main uses AJAX technology. Key words: EAM; Multi-level query; Database目 录第1章 引言11.1 概述11.1.1 EAM的流程和原理11.1.2 EAM的经济效益21.1.3 EAM的构成及特点31.2 企业资产管理的研究现状和发展趋势4第2章 多级查询的实现52.1 多级查询的实

7、现方法52.2 Ajax开发52.2.1 AJAX的定义52.2.2 现状与需要解决的问题52.2.3 为什么使用AJAX62.2.4 用AJAX改进你的设计72.2.5 AJAX的缺陷72.3 Hibernate开发82.3.1 Hibernate概述82.3.2 Hibernate原理及接口92.3.3 Hibernate接口92.3.4 映射机制122.3.5 查询机制152.3.6 Hibernate的优点17第3章 多级查询在资产管理中的应用183.1 企业资产管理系统项目介绍183.1.1 产品环境介绍183.2 多级查询的实现203.3 本章小节28结 论29参考文献30致 谢3

8、131第1章 引言1.1 概述EAM (Enterprise Assets Management)就是企业资产管理。随着管理信息化程度的不断提高,企业资产管理的内容和范畴也在不断丰富和深化。不仅设备是企业的重要资源,企业的生产环境、设备维护工人的劳动技能和劳动 热情也是企业重要的资源。EAM(企业资产管理)是实现企业资产管理信息化的重要手段。通过使用EAM系统,除了可以提高设备利用率、获得高产出以外,还可以在更广泛的意义上,对企业的产品品质、生产安全性、节约能源、环境保护提供重要的保障。应用EAM系统的目的,就是让企业资产管理不再成为企业发展的瓶颈。由于企业资产是一个涉及设备、人员、生产工艺、

9、技术诀窍的综合概念,所以EAM的应用范围是很广泛的。特别对那些设备品种多、价格高、对设备完好率及连续运转可利用率要求较高的资产密集型企业,更离不开EAM系统的应用。1.1.1 EAM的流程和原理与其他企业信息化系统不同的是,EAM是以资产、设备台帐为基础,以工作单的提交、审批、执行为主线,按照缺陷处理、计划检修、预防性维修、预测性维修几 种可能模式,以提高维修效率、降低总体维护成本为目标,将采购管理、库存管理、人力资源管理集成在一个数据充分共享的信息系统中。EAM是个集成系统。虽然可以分为多个模块,但模块之间是密切相关的。设备、维修、库存、采购、分析等一环套一环,有关信息“一处录入、多处共享”

10、,保证了资产信息的及时性和准确性。EAM是个闭环系统,如果单从设备维护的角度看,系统可以分为三个层次:维修规划、维修处理、维修分析。维修规划,根据设备基础数据和维修历史制定设备维修目标和计划;维修处理完成计划的执行、收集各类维修历史数据;维修分析则分析维修历史数据,把分析结果反馈给维修计划。通过这一次次的闭环,使得维修计划越来越准确可行,从而减少非计划性的维修和抢修,达到降低维修成本的目的。EAM的执行,离不开基础数据准备。EAM是一种管理信息系统,要进行大量的数据处理。因此要求基础数据的规范化,或者说必须有统一的标准。同时,EAM也要求数据的准确性,这就需要管理制度的配合。通常,EAM的数据

11、可以分为三类:静态数据(包括设备和备件的分类信息、属性信息、技术说明、定额指标、位置信息、供应商信息、工具信息、维修人力资源信息等方面),动态数据(设备运行数据、维修数据、移动数据、备件库存数据、采购合同数据、维修工作单数据等方面)以及中间数据(各类查询结果、统计报 表、分析结果等数据)。EAM的管理,遵循的是“统一管理,分部执行”原则领导指定维修管理目标、规划、财务预算,通过EAM下达给具体维修执行部门;维修部门反馈执行结果,集成、汇总信息。作为管理信息系统,EAM不属于生产过程控制系统,也不完全是一个维修专家系统,它提供信息的价值在于人们能利用这些信息做出正确的决策或作为优化的依据,来指导

12、管理工作。1.1.2 EAM的经济效益EAM能集成设备管理中各个业务层面的信息,满足先进的生产设备对现代生产组织保障的要求,使企业更好地适应瞬息万变的市场竞争。使用EAM,能让企业达到以下目标: 量化TPM、固化TPM流程 实现资产管理信息化 更有效地配置生产设备、人员及其他资源 借助EAM系统的帮助,每位维修管理人员可以管理更多的设备 改善工人的安全保障,促进规程的执行,减少停产时间 建立清晰的、动态的设备数据库,提高设备可利用率及可靠性,控制维护及维修费用,延长设备生命周期 降低备件库存及备件成本 帮助企业更好地贯彻ISO9000,符合行业和政府部门的法规 根据Gartner Group对

13、已经实施过EAM企业的调查,在以下几个方面企业获得了经济效益: 提高有效工作时间 10-20% 降低库存成本 10-25% 减少设备停机时间 10-20% 增加设备使用效率 20-30% 延长设备生命周期 超过10% 备件库存准确率 超过95% 1.1.3 EAM的构成及特点EAM是一个集成的设备维护系统,EAM基本成分有以下一些功能:设备资产&技术管理:建立设备信息库,实现设备前期的选型、采购、安装测试、转固;设备转固后的移装、封存、启封、闲置、租赁、转让、报废,设备运行过程中的技术状态、维护、保养、润滑情况记录。设备文档管理:设备相关档案的登录、整理以及与设备的挂接。 设备缺陷&事故管理:

14、设备缺陷报告、跟踪、统计,设备紧急事故处理。预防性维修:以可靠性技术为基础的定期维修、维护,维修计划分解,自动生成预防性维修工作单。维修计划&排程:根据日程表中设备运行记录和维修人员工作记录,编制整体维修、维护任务进度的安排计划,根据任务的优先级和维修人员工种情况来确定维修工人。 工单的生成和跟踪:对自动生成的预防性、预测性维修工单和手工录入的请求工单,进行人员、备件、工具、工作步骤、工作进度等的计划、审批、执行、检查、完工报告,跟踪工单状态。备品、备件管理:建立备件台帐,编制备件计划,处理备件日常库存事务(接受、发料、移动、盘点等),根据备件最小库存量或备件重订货点自动生成采购计划,跟踪备件

15、与设备的关系。维修成本核算:凭借工作单上人员时间、所耗物料、工具和服务等信息,汇总维修、维护任务成本,进行实际成本与预算的分析比较。缺陷分析:建立设备故障代码体系,记录每次故障发生的情况以进行故障分析。统计报表:查询、统计各类信息,包括设备的三率报表、设备维修成本报表、设备状态报表、设备履历报表、备件库存周转率、供应商分析报表等。同时,EAM要考虑的还有系统的扩充性,如安全生产、产品质量、能源利用、环境保护等方面的功能。1.2 企业资产管理的研究现状和发展趋势在国内外,企业资产管理系统是一个正在蓬勃发展的新兴企业所必需系统,并且越来越多的受到企业的欢迎和认可。但是,由于还没有健全,就难免会存在

16、一些问题,且不说企业资产管理安全等问题,业务功能的优劣正逐渐成为制约企业资产管理发展的重要因素之一。第2章 多级查询的实现2.1 多级查询的实现方法多级查询的实现,可以通过页面层实现,也可以通过数据库来实现。其中,页面的多级查询可以通过Ajax技术来实现,数据库的多级查询可以通过Hibernate技术来实现。2.2 Ajax开发Ajax作为一种越来越流行越热的“老”技术一种比较“老”的技术,现在正得到越来越多的关注。如今,随着Gmail、Google-maps的应用和各种浏览器的支持,AJAX正逐渐吸引全世界的眼球。2.2.1 AJAX的定义AJAX(Asynchronous JavaScri

17、pt and XML)其实是多种技术的综合,包括JavaScript、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest。其中:使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用JavaScript绑定和处理所有数据。2.2.2 现状与需要解决的问题传统的Web应用采用同步交互过程,这种情况下,用户首先向HTTP服务器触发一个行为或请求的呼求。反过来,服务器执行某些任务,再向发出请求的用户返回一个HTML页面。这是一种不连贯的用户体验,服务器在处理请求的时候,

18、用户多数时间处于等待的状态,屏幕内容也是一片空白。自从采用超文本作为Web传输和呈现之后,我们都是采用这么一套传输方式。当负载比较小的时候,这并不会体现出有什么不妥。可是当负载比较大,响应时间要很长,1分钟、2分钟数分钟的时候,这种等待就不可忍受了。严重的,超过响应时间,服务器干脆告诉你页面不可用。另外,某些时候,我只是想改变页面一小部分的数据,那为什么我必须重新加载整个页面呢?!当软件设计越来越讲究人性化的时候,这么糟糕的用户体验简直与这种原则背道而驰。为什么老是要让用户等待服务器取数据呢?至少,我们应该减少用户等待的时间。现在,除了程序设计、编码优化和服务器调优之外,还可以采用AJAX。2

19、.2.3 为什么使用AJAX与传统的Web应用不同,AJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理等待处理等待缺点。用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用JavaScript调用 AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给AJAX来执行。使用AJAX

20、,可以为ISP、开发人员、终端用户带来可见的便捷:u 减轻服务器的负担。AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。u 无刷新更新页面,减少用户心理和实际的等待时间。特别的,当要读取大量的数据的时候,不用像Reload那样出现白屏的情况,AJAX使用XMLHTTP对象发送请求并得到服务器响应,在不重新载入整个页面的情况下用JavaScript操作DOM最终更新页面。所以在读取数据的过程中,用户所面对的不是白屏,是原来的页面内容(也可以加一个Loading的提示框让用户知道处于读取数据过程),只有当数据接收完毕之后才更新相应部分的内容。这种更新是瞬间的,

21、用户几乎感觉不到。u 带来更好的用户体验。u 可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。u 可以调用外部数据。u 基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。u 进一步促进页面呈现和数据的分离。2.2.4 用AJAX改进你的设计以前,为了避免每次对菜单的操作引起的重载页面,不采用每次调用后台的方式,而是一次性将级联菜单的所有数据全部读取出来并写入数组,然后根据用户的操作 用JavaScript来控制它的子集项目的呈现,这样虽然解决了操作响应速度、不重载页面以及避免向服务器频繁发送请求的问题,但是如果用户

22、不对菜单进 行操作或只对菜单中的一部分进行操作的话,那读取的数据中的一部分就会成为冗余数据而浪费用户的资源,特别是在菜单结构复杂、数据量大的情况下(比如菜单 有很多级、每一级菜又有上百个项目),这种弊端就更为突出。 现在应用AJAX,在初始化页面时我们只读出 它的第一级的所有数据并显示,在用户操作一级菜单其中一项时,会通过Ajax向后台请求当前一级项目所属的二级子菜单的所有数据,如果再继续请求已经呈现 的二级菜单中的一项时,再向后面请求所操作二级菜单项对应的所有三级菜单的所有数据,以此类推这样,用什么就取什么、用多少就取多少,就不会有数据的 冗余和浪费,减少了数据下载总量,而且更新页面时不用重

23、载全部内容,只更新需要更新的那部分即可,相对于后台处理并重载的方式缩短了用户等待时间,也把对 资源的浪费降到最低。2.2.5 AJAX的缺陷AJAX不是完美的技术。使用AJAX,它的一些缺陷不得不权衡一下:u AJAX 大量使用了JavaScript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。u AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经

24、常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。u 对流媒体的支持没有FLASH、Java Applet好。u 一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。2.3 Hibernate开发Hibernate是一种新的ORM映射工具,它提供了从Java类到数据表的映射以及数据查询和恢复等方法。在大型项目中,特别是持久层关系映射很复杂的情况下,Hibernate会表现出非常高的运行效率。2.3.1 Hibernate概述Hibernate是一个面向Java环境的对象/关系数据库映射工具。Hibernate不仅仅管理Java类到数据库映射,还提

25、供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间,而只用对对象进行操作。Hibernate本质上还是包装了JDBC来进行数据库操作的,由于Hibernate在调用JDBC上面是绞尽脑汁的优化JDBC调用,并且尽可能地使用最优化的,最高效的JDBC调用,所以性能相当令人满意。Hibernate是轻量级的封装,避免过多复杂的功能,减轻程序员的负担。同时,它也是一个开源的代码,提供开放的API,用户可以自行扩充其功能。Hibernate在大多数主流J2EE应用服务器的受管理环境中都可以良好运作,也可以作为独立应用程序运行。Hibernate的精髓是持久层实现模式

26、。它完全是针对对象的持久化,即把一个普通的Java对象映射到关系数据库中。面向对象设计中的继承与多态机制在Hibernate里也得到了支持,在数据查询中,它支持动态Query,并提供对十六种数据库语言的支持,它沿用传统数据库的事务模型,使程序员不必为新的事务模型大伤脑筋。另外,Hibernate是本地调用,比Entity Bean有更高的性能,而且它改进的速度之快也是其他ORM产品无法企及的。2.3.2 Hibernate原理及接口Hibernate是一个开源的ORM框架。作为一个面向Java环境的ORM工具,Hibernate可以方便地把对象模型所表示的对象映射到基于SQL的关系模型结构中去

27、。它不仅管理Java类到数据库表的映射,还提供了数据查询和获取数据的方法,可以大幅度减少开发过程中使用SQL和JDBC处理数据的时间。Hibernate本质上是一个提供数据库服务的中间件。Hibernate是利用数据库以及其它一些配置文件如hibernate. properties, XML Mapping等来为应用程序提供数据持久服务的。2.3.3 Hibernate接口Hibernate的编程接口大致可以分为以下几类:1. 一些被用户的应用程序调用的,用来完成基本的创建、读取、更新、删除操作以及查询操作的接口。这些接口是Hibernate实现用户程序的业务逻辑的主要接口,它们包括Sessi

28、on、Transaction和Query。2. Hibernate用来读取诸如映射表这类配置文件的接口,典型的代表有Configuration类。3. 回调(Callback)接口。它允许应用程序能对一些事件的发生做出相应的操作,例如Interceptor、Lifecycle和Validatable都是这一类接口。4. 一些可以用来扩展Hibernate的映射机制的接口,例如UserType、CompositeUserType和IdentifierGenerator。这些接口可由用户程序来实现(如果有必要)。2.3.3.1 核心API当用Hibernate开发基于持久层的应用时,开发人员应当熟

29、悉它的API接口,这也是运用Hibernate进行开发的一个前提条件。以下介绍Hibernate在应用层和持久层中的一些重要的接口类。(1) Session接口。Session接口对于Hibernate开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但值得注意的是Session对象是非线程安全的,因此在设计中,最好是一个线程只创建一个Session对象。在Hibernate

30、的设计者的头脑中,他们将Session看作介于数据连接与事务管理一种中间接口。我们可以将Session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库获得它们。请注意,Hibernate的Session不同于JSP应用中的HttpSession。当我们使用Session这个术语时,我们指的是Hibernate中的Session,而将HttpSession对象称为用户Session。(2) SessionFactory接口。这里用到了一

31、个设计模式工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。SessionFactory并不是轻量级的。实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当项目要操作多个数据库时,那就必须为每个数据库指定 一个SessionFactory。SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。(3) Configuration接口。Configuration接口对

32、Hibernate进行配置、启动。在Hibernate的启动过程中,Configuration类的实例会定位映射文件的位置并读取有关配置,然后创建一个SessionFactory对象。(4) Transaction接口。Transaction接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA中的UserTransaction、甚至可以是CORBA事务。Transaction接口是一个可选的API。(5) Query接口。Query接口让你方便地对数据库及持久对象进行查询,它经常被用来绑定查询参数、限制查询记录数量,并最后执行查询操作。以上描述的5个核心接口几乎在任何实际开发中都

33、会用到,通过这些接口,开发人员不仅可以存储和获得持久对象,并且能够进行事务控制。2.3.3.2 其它重要API除了以上五个核心接口外,还有几个比较重要的接口:(1) Callback接口。当一些有用的事件发生时,例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但要在项目中创建审计日志时,可能会用到它。(2) TypesType在整个构架中是一个非常基础、有着强大功能的元素。一个Type对象能将一个Java类型映射到数据库中一个表的字段中去(实质上,它可以映射到表的多个字段中去)。持久类的所

34、有属性都对应一个type。这种设计思想使Hibernate有着高度的灵活性和扩展性。Hibernate内置很多type类型,几乎包括所有的java基本类型,例如Java.util.Currency、Java.util.calendar、byte和Java.io.Serializable。不仅如此,Hibernate还支持用户自定义的type,通过实现接口UserType和接口CompositeUserType,可以加入自己的type。(3) 策略接口Hibernate与某些其它开源软件不同的还有一点高度的可扩展性,这通过它的内置策略机制来实现。当你感觉到Hibernate的某些功能不足,或者有

35、某些缺陷时,可以开发一个自己的策略来替换它,而所要做的仅仅只是继承它的某个策略接口,然后实现新就可以了,以下是它的策略接口: 主键生成(IdentifierGenerator接口) 本地SQL语言支持(Dialect抽象类) 缓冲机制(Cache和CacheProvider接口)JDBC连接管理(ConnectionProvider接口)事务管理(TransactionFactory,Transaction和TransactionManagerLookup接口) ORM策略(ClassPersister接口)属性访问策略(PropertyAccessor接口)代理对象的创建(ProxyFact

36、ory接口)2.3.4 映射机制 J2EE框架下的应用程序都是基于域模型的,在这种模型下,应用程序实现复杂的业务逻辑和复杂的实体交互。ORM映射机制最适合使用在基于复杂的域模型应用中,域模型越复杂,使用Hibernate所带来的好处越明显。在域 模 型 的执行中,Hibernate采用透明持久对对象/关系进行持久化。透明表示在域模型的持久类和持久逻辑本身之间完全的关系分离,在持久逻辑中,持久类完全不知道也不依赖于持久机制。2.3.4.1 普通Java对象POJOHibernate的ORM从编程模型上看就是把一个普通Java对象POJO(Plain Ordinary Java Object)映射

37、为关系数据库中的表。映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以Java为中心的,意味着映射是按照持久化类的定义来创建的,而非表的定义。 一个POJO很像一个JavaBean,没有EntityBean那样冗长的接口。Hibernate正是在使用POJO的域模型中工作的。一个 POJO声明了属性(代表对象的状态)、业务方法(代表对象的行为)和对属性的访问方法。以一个Course对象为例,简单说明如下:public class Course implements Seiralizable (public String cou

38、rseName;public int id ;public String getCourseName()(return this.courseName;)public void setCourseName(String name)(courseName = name;)public int getId()(return this.id ;)Hibernate不要求持久对象实现Seiralizable(序列化)接口,但是当对象存储在HttpSession中或者用RMI进行值传递时,序列化是必须的。属性通常作为实例变量与属性访问方法一起执行。访问方法是用来检索实例变量的值和改变其值的方法,分别称为

39、geter和seter方法。Hibernate不要求访问方法声明为公有的,它可以很容易的使用私有访问方法来管理属性。2.3.4.2 继承映射最简单的类到数据库表的映射策略是“一个类一张表”。这个方法确实听起来很简单,但是在遇到继承问题的时候就不能有效的起作用了。继承是面向对象结构中最明显的特征。继承关系有三种不同的映射方法:1) 每个具体的类映射为一个表。这跟前面讲的最简单的映射方法是一样的,一个类的所有属性,包括从超类继承过来的属性,都一一映射为数据库表的列。即超类superclass映射为一个表,子类subclass:映射为单独的表,在数据库中,它们之间的关系通过外键(Foreign Ke

40、y)表示。这种映射策略不需要任何Hibernate的特殊映射声明,只需要把每一个类的映射包含在声明中,并且为每个类定义一个表属性。这种方法的主要问题是它不能很好的支持多态关系。还有就是在这些表中,不同表的不同列属性有共同的语意,如子类继承超类的属性,这使关系的维护更复杂了。例如对超类属性的改变会导致很多列的改变,这也使在子类上执行数据完整性约束更加困难。2) 整个类层次关系映射为一个表。作为对“一个类一个表”策略的替代,我们可以把整个类层次关系映射为一个表,这个表的列包括类层次关系中所有类的属性。每一个具体的子类用特定的行来表示,它可以通过列discriminator的值来识别,如下所示:父类

41、的映射增加一个discriminator-value属性,它的值用来标志父类,同时增加一discriminator:在子类的映射中也增加一个discriminator-value属性,它的值用来标志该子类:discriminator-value的值在分别查询父类和子类时做查询条件:新增加的 discriminator列用来区分持久类,它不是类的属性,由Hibernate内部使用,它的值,即discriminator-value。给出的值会被Hibernate自动设置和检索。整个层次关系,超类和子类都被映射在了同一张表中,超类用声明,子类用声明,当然,子类中又可以包括子类。这种映射策略进行多态查

42、询时可以一次执行,在分别进行超类和子类查询时,可以用discriminator列的值做条件,因为超类和子类有不同的discriminator值。3) 子类和超类映射为不同的表。即每一个在持久关系中定义的子类都映射为单独的一个表。与第一种策略不同的是,子类对应的表只包括非继承属性,即每一个属性都是子类特有的。每一个子类的表有一个主键与超类相关联。映射文件中子类的声明用表示,嵌套在中,并且要声明一个主键key。这种策略的主要好处是关系模型完全规格化,完整性约束的定义也直截了当。对特定子类的多态联结是通过指向该子类的表的外键来表示的。Hibernate在执行多态查询的时候,自动把超类和子类的表外联接

43、(outer join)查询,如果只限制在对子类查询时,Hibernate使用内联接(inner join)。根据经验来看,复杂的类层次执行效率让人无法接受,查询需要联接多个表或者许多顺序读操作。因此,针对应用程序中的类层次,必须选择一种合适的映射策略或者对映射策略做一个适当的组合。一般有以下原则:在不要求多态关联和查询时,倾向于使用一个类一个表的映射策略;如果要使用多态关联并且子类中声明的属性相对较少,则倾向于使用一个类层次一个表的映射策略:如果要求多态关联和查询,并且子类声明的属性比较多,则使用一个子类一个表的映射策略。2.3.5 查询机制2.3.5.1 查询方法检索持久对象是Hibern

44、ate的另一项重要功能。Hibernate提供了以下几种从数据库中得到对象的方法:1)通过对对象图的导航,从一个已经装载的对象开始,由它的属性访问方法来访问相关联的对象。当用户导航对象图的时候,如果Session处于打开状态,Hibernate会自动装载或者预装载对象图中的结点。2)通过标志符检索。当已知对象的唯一标志符时,这种方法是最方便性能最好的。用标志符检索对象可以用loads和geto两种方法。3)使用Hibernate提供的查询语言(HQL),它是一个完全面向对象的查询语言。HQL是SQL的一个面向对象的方言,它与ODMG OQL(对象数据库查询语言)和EJB-QL有非常类似,但是与

45、OQL不同的是它适用于使用SQL的数据库,并且比EJB-QL功能更强大更优雅。HQL不是一个数据操纵语言,它只用来检索对象,而不是更新删除数据。对象状态的同步是持久化管理器的工作而不是开发者的工作。HQL有以下高级特性:u 把数据约束应用到关联对象的属性:u 在事务范围内不装载实体本身而检索实体的属性,这也被称为报告查(report query)或更确切的叫做注射(projection);u 对查询结果排序;u 对查询结果分页;u 通过groupby, having或者sum, max等函数对结果集进行分类;u 当检索一行多对象时使用外联接;u 调用用户定义的SQL函数;u 子查询(嵌套查询)

46、。4)使用Hibernate提供的Criteria API查询。Criteria API提供了一个类型安全的、面向对象的方法来执行查询,而不需要字符串操纵。它包括了基于实例对象的查询。5) 使用本地SQL语言查询.Hibernate支持16种数据库方言,几乎所有流行的数据库它都支持,因此,用户也可以直接使用自己熟悉的数据库语言进行查询。在实际的Hibernate应用程序中,各种检索方法可以联合使用,每一种检索方法可以使用不同的数据获取策略。这样可以为应用程序中的用例找到最好的检索方法和数据获取策略,同时最小化SQL查询语句的数量,获得最佳性能.在传统的关系数据访问中,利用内联接和外联接检索关联实体,可以用一条SQL语句获取特定计算要求的数据。ORM中最难的问题之一是为关系数据提供有效的访问。2.3.5.2 数据获取策略Hibernate为每一种关联提供了四种获取策略以供选择:立即获取使用连续的数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1