已阅读5页,还剩67页未读, 继续免费阅读
(管理科学与工程专业论文)基于hibernate的数据层设计模式的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文摘要 摘要 当今软件开发领域,面向对象技术、数据库技术以及组件复用理论的发展迅 速,对软件体系架构的研究引起了人们的广泛关注。软件体系架构的目的是为了 实现软件复用,软件复用是指重复使用“为了复用的目的而设计的软件”的过程。 软件复用的思想是将软件看成是由不同功能部分的组件组成的有机体,每一个组 件可以被设计成能够完成同类工作的通用工具。一个合理的体系架构可以大大提 高系统的可扩充性、可维护性,同时也便于任务的划分,另外这种稳定的体系架 构还可以移植到其他的系统中在实际的系统开发中面向对象技术与关系数据库 技术仍唱主角,开发人员也热衷于把这两种技术的结合应用作为首选,可是面向 对象技术是基于对象的相关理论而关系数据库技术是基于关系理论尤其是代数中 的集合论,理论基础的不同直接导致了两种技术的“阻抗不匹配”因此迫切需要 一种解决不匹配的策略,于是对象关系映射( o b j e c tr e l a t i o n m a p p i n g _ o r m ) 应运而生。 本文首先对面向对象技术与关系数据库理论进行了深入探讨,针对对象、关系 的特点重点研究了它们之间的映射策略,总结出一套映射原则及映射实现的方法; 其次从数据持久化的核心模式角度对系统的持久化策略进行了划分,并对实现持 久化的主流技术进行了深入剖析,通过各种持久化技术的对比得出h i b e r n a t e 是实 现数据持久化的较好选择;再次以分层的体系架构理论为指导,基于h i b e r n a t e 建 立了数据持久与访问的框架模型,该模型在数据持久层能够很好地完成数据的 c r u d ( c r e a t e 创建、a d 读取、u p d a t e 更新、d e l e t e 删除) 操作,在数据访 问层的设计上引入了多种设计模式,使模型更具灵活性,从而达到易移植、易扩 充、易维护的目的;最后以科技管理系统作为实现案例,将模型应用到了该系统 的设计开发中,并在系统中运行了多组测试数据验证了模型的合理性。 关键词:数据持久化l 对象关系映射;设计模式l 多层体系结构 英文摘要 r e s e a r c ha n dr e a l i z a t i o no fd e s i g np a t t e r nf o rd a t a - t i e r b a s e do nh i b e r n a t e a b s t r a c t n o w a d a y si nt h es o r w a r ed e v e l o p m e n tf i e l d ,o b j e c t - o r i e n t e dt e c h n o l o g y , d a t a b a s e t e c h n o l o g ya n dt h e o r yo fc o m p o n e n tr e u s ed e v e l o pr a p i d l y i th a sa r o u s e dp e o p l ep a y c l o s ea t t e n t i o nt os o f t w a r es y s t e mf i a m c w o r kr e s e a r c h t h ep u r p o s eo fs o r w a r e f ! a m e w o r ki ss o f t :w a r er e u s e ,w h i c hm p 1 l st h ep r o s so f r e u s i n gt h es o f t w a d e s i g n e d f o rt h ep u r p o s eo fr e u s i n g t h i n k i n go fs o r w a r ed 朗娣i st oc o n s i d e rs o l , r a t ea sa c o m p l e xo fd i f f e r e n tc o m p o n e n t s ,a n de a c ho fc o m p o n e n t sc a nb ed e s i g n e da sa c o m m o nt o o lt or e a l i z et h es i m i l a rf u n c t i o n ar a t i o n a lf z a m e w o r kc a ni m p r o v e e x p a n s i o n , m a i n t a i n a b i l i t ya n de a s i n e s s o ft a s k p a r t i t i o n m e a n w h i l e t h es t a b l e f i a m e w o r kc a nb et r a n s p l a n t e dt oo t h e rs y s t e m s a c t u a l l y , o b j e c t - o r i e n t e dt e c h n o l o g y a n dd a t a b a s et e c h n o l o g yp l a ya ni m p o r t a n tp a r ti nm a n ys y s t e m s ,a n dd e v e l o p e r sa r e k e e no nt h eu n i o no ft h e m o b j e c t - o r i e n t e dt e c h n o l o g yi sb a s e do nt h e o r i e so fo b j e c t , b u tr e l a t i o nd a t a b a s et e c h n o l o g yi sb a s e do nt h e o r i e so fr e l a t i o ne s p e c i a l l yt h e o r i e so f s e t d i v e r s i t yo fb a s et h e o r yh a sl e dt om i s m a t c ho ft h et w ot e c h n o l o g i e s t h e r e f o r ea s t r a t e g yt or e s o l v em i s m a t c hi sr e q u i r e du r g e n t l y , a n dt h eo b j e c tr e l a t i o nm a p p i n ga r i s e s a tt h es a n l et i m e f i r s t l y , o b j e c t - o r i e n t e dt e c h n o l o g ya n dr e l a t i o nd a t a b a s et e c h n o l o g ya r ed i s c u s s e d d e 印l y , t h em a p p i n gs t r a t e g yb e t w e e nt h e mh a v eb e e np a i dm o r ea t t e n t i o nt o t h e m a p p i n gp r i n c i p l ea n dr e a l i z a t i o nm e t h o dh a v eb e e ns 眦u p s e c o n d l y , t h ep e r s i s t e n c es t r a t e g yi ns y s t e mi sd i v i d e da c c e d i n gt ot h ec o r ep a t t e r n i nt h ed a t ap e r s i s t e n c e t h em a i n s t r e a mt h e o r yo ft h ep e r s i s t e n c et e c h n o l o g yi s i l l u s t r a t e da n dt h ec o n c l u s i o ni st h a tt h eh i b e r n a t ei sab e t t e rs e l e c t i o ni nt h ep e r s i s t e n c e r e a l i z a t i o nc o m p a r e dw i t ho t h e rp e r s i s t e n c et e c h n o l o g y t h i r d l y , i nt h eg u i d e l i n eo f m u l t i - t i e rs y s t e ms t r u c t u r e ,t h ef r a m e w o r km o d e lo f d a t a p e r s i s t e n c ea n da c c e s sh a sb e e ne s t a b l i s h e d , w h i c hc a l lr e a l i z et h ec r u d ( c r e a t e 、 r e a d 、u p d a t e 、d e l e t e ) o p e r a t i o no nt h ed a t ap e r s i s t e n c el a y e r m a n yk i n d so fd e s i g n p a t t e r n sh a v eb e e np r o p o s e do nd a t aa c c e s sl a y e r , w h i c hc a nm a k et h es y s t e mm o r e f l e x i b l e ,m o r ee x p a n s i b l e ,a n dm o r em a i n t a i n a b l e 英文摘要 f i n a l l y , w i t ht h ec a s eo ft e c h n o l o g ym a n a g e m e n ts y s t e m , t h i sm o d e lh a sb e e n a p p l i e dt od e s i g na n dd e v e l o p m e n to f t h i ss y s t e m , a n dt h er a t i o n a u t yo f t h i sm o d e lh a s b e e nt e s t e db ym a n y 粤_ o u p so f t e s td a t ai nt h es y s t e mr u n n i n g k e yw e r d s :d a t ap e r s i s t e n c e :0 b j e c tr e l a t i o nm a p p m g ;d e s i g np a t t e r n ; m u m - t i e rf r a m e w o r k 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成硕士学位论文:基王避塑逊的数据屋遮盐搓式的班究皇塞班:。除论文中 已经注明引用的内容外,对论文的研究做出重要贡献的个人和集体,均已在文中 以明确方式标明。本论文中不包含任何未加明确注明的其他个人或集体已经公开 发表或未公开发表的成果。 本声明的法律责任由本人承担。 论文作者签名:引;灞令d 哆年,月,目 学位论文版权使用授权书 本学位论文作者及指导教师完全了解“大连海事大学研究生学位论文提交、 版权使用管理办法”,同意大连海事大学保留并向国家有关部门或机构送交学位论 文的复印件和电子版,允许论文被查阅和借阅。本人授权大连海事大学可以将本 学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫 描等复制手段保存和汇编学位论文。 保密口,在年解密后适用本授权书。 本学位论文属于: 保密口 不保密回( 请在以上方框内打“”) 论文储躲? 占; a 船师繇,【仇 日期: c i 唧年孑月“日 基于h i b e r n a t e 的数据层设计模式的研究与实现 第1 章绪论 1 1 课题研究的背景和意义 面向对象技术、数据库技术以及信息系统中组件复用理论发展迅速,特别是 面向对象技术已经成为当今软件开发的主流技术。与此同时,对信息系统体系结 构的研究也引起了人们的广泛关注,人们已经意识到一个合理的体系结构可以大 大提高系统的可扩充性、可维护性,同时也便于任务的划分,另外这种稳定的体 系结构还可以移植到其他的系统中。软件体系架构的目的是为了实现软件复用, 软件复用是指重复使用“为了复用的目的而设计的软件”的过程【l 】。软件复用的思 想是将软件看成是由不同功能部分的组件组成的有机体,每一个组件在设计编写 时可以被设计成能够完成同类工作的通用工具【2 j 。 目前绝大多数的管理信息系统,仍然采用数据库作为数据存储手段,而数据 库的应用还是以关系型数据库居主流地位在这种基于关系数据库的应用系统中 对数据的处理操作占了很大的工作量,大部分的数据处理即所谓的c r u d ( 创建 c r e a t e ,读取r e a d ,更新u p d a t e ,删除d e l e t e ) 操作。传统的企业应用大都是基于数 据库的传统c s 模式,这带来了系统互操作性差、可扩充性差、难以移植等弊病, 随着应用范围的扩大,必然影响系统性能的正常发挥,使系统性能不能很好地满 足现今的性能需求。在此背景下,人们提出了网络环境下的三层甚至多层的体系 结构,增加了数据层、组件层等等。多层体系架构将数据层与业务逻辑层进行了 分离,因此在很大程度上降低了业务逻辑与数据处理的耦合性,从而保证系统能 够及时适应管理的多变性,能够帮助开发人员在实际的系统开发过程中对开发任 务进行纵向划分。多层体系架构中,c r u d 操作处在数据层上,因此为了保证开 发的高效性、运行的稳定性、维护的方便性等,需要对数据层的设计迸行深入研 究。 在对数据访问进行设计时,为了达到代码尽可能被重用易于他人理解、保证 代码可靠性等目的,开发人员常常使用设计模式作为设计指导,设计模式使代码 编制真正工程化,是信息系统工程的基石【3 】。在数据持久化的实现上,目前主要有 三种模式,即基于通用数据访问模块的模式、基于数据访问对象的模式、基于对 象关系映射的模式。其中基于对象关系映射的模式受到了越来越多开发人员的青 第1 章绪论 睐,而实现对象关系映射的工具也层出不穷,众多实现技术中当今比较流行的是 h i b e r n a t e 技术。h i b e r n a t e 大大减少了针对数据操作的复杂的s q l 语句,降低了编 程人员的工作量。h i b e r n a t e 采用x m l 技术实现对象关系的映射,使得开发人 员不是对数据库直接进行操作而是对对象进行操作,实现了真正意义上的面向对 象的编程,真正的数据库操作是由h i b e r n a t e 来实现的。 本论文将对对象关系映射策略、数据访问模式、数据持久化策略以及软件架 构,设计模式进行深入研究,并将建立一个稳定的、通用的数据访问与持久框架 模型,模型中采用的数据持久化方案可以说是关系数据库到对象数据库的过渡, 而且还可以解决异构数据库的交互问题。因此本课题的研究具有一定的理论和实 际意义 1 2 研究现状概述 。 信息系统开发,数据和过程都是不可或缺的基本要素。数据是静态的因素, 而过程是动态的因素,是对数据的处理流程。在传统的系统开发方法中,由于过 程与数据的分离,随着专门针对过程处理的高级程序设计语言的出现,相应地也 出现了专门针对数据持久的文件系统和数据库管理系统等技术。但是随着数据和 过程在细粒度上紧耦合成对象,那么最理想的状态就是把专门针对过程处理的高 级程序设计语言和专门针对数据持久的数据库管理系统技术在细粒度上也耦合起 来,从而发展出一种新的具有持久化空间的对象。无疑这一意义上的对象具备了 对象持久的先天优势,但这势必要求抛弃旧有技术而发展出一种新的对象技术, 而这又是人们的思想一时不能接受的因而现阶段在实现对象持久化上并没有采 用这种彻底的面向对象技术,而是保留了现有数据持久化技术,以通过保留对象 状态再还原的方式来变相实现对象持久化。 目前业界采用了多种不同机制来实现对象持久存储,而这些机制中又以支持 事务处理、技术相对成熟的关系数据库存储机制尤为普遍。在j 2 e e 平台下,提供 了多种数据持久化的实现机制,如j d b c 、e j b 、j d o 、h i b e r n a t e 等。这些技术在 整个市场中都占有一定的份额。j d b c 是j a v a 数据访问最原始、最直接、效率最 高的方法,在目前许多中小型项目中仍然采用这种方式。e j b 曾经是j 2 e e 领域的 核心,目前也有许多项目是基于e j b 的。但是实现起来的复杂性往往使人望而却 2 基于h i b e r n a t e 的数据层设计模式的研究与实现 步。j d o 技术是s u n 公司倡导的j a v a 数据规范,它不是免费的开源项目,目前在 国内还没有销售和技术支持,标准还不完善,存在重大缺陷。h i b e r n a t e 是近年来 数据持久化的热门技术,它有效地解决了对象和关系之间的阻抗不匹配问题,通 过底层封装了j d b c 数据持久的代码,为开发人员提供了真正的面向对象的开发 方法【4 1 嘲在数据访问处理方面,目前业界比较惯用的有三种模式 4 1 :业务逻辑与 数据访问细节耦合的模式、基于主动域对象的模式、基于对象关系映射的模式。 这三种模式的区别主要在于数据访问细节的封装上。基于对象关系映射的模式是 日前数据访问处理方面比较新颖的模式,也是越来越受青睐的模式。在多层体系 结构的数据层的设计上,为了获取较高的稳定性、较好的可扩充性,开发人员常 常会借用设计模式这把利器来获得较好的设计效果。 软件的分层体系结构以及设计模式的研究也是当今的热点。分层体系结构已 由最初的两层结构发展到了三层甚至四层或更多层结构。m i c r o s o f t 公司为了配合 推出n e t 战略,不仅发布了一系列的开发工具和开发平台,同时还推出了n e t 平台上的示范应用n e tp e t s h o p ,该项目就是基于分层体系结构的 0 3 。与之对应, 在j 2 e e 平台上s u n 公司也推出了示范项目j 2 e ep e t s t o r e 。设计模式的研究只有十 年左右历史,是一个新兴的研究领域,同时也是一个热点的研究领域。目前国外 软件工程界正把设计模式应用于软件体系结构、设计、编码和软件开发的工程和 组织等。国内对于设计模式的了解基本从1 9 9 6 年才开始,对设计模式的研究也就 最近几年才开始,设计模式在企业应用领域的研究及应用尚处于起步阶段。 目前有些系统中数据访问与业务逻辑耦合在一起,这势必会造成系统的可维 护性差、可移植性差等问题而在数据处理上也没有真正实现面向对象的操作。 为解决这些问题本文将对相关理论与技术进行深入的研究工作,并将建立一个稳 定的数据持久与访问框架模型。 1 3 论文的研究内容 本文针对以下几方面内容进行了深入展开: 面向对象与关系理论的分析研究。总结了面向对象的基本概念、面向对象 的数据结构的特点以及关系的基本概念、关系数据结构的特点。 对象关系映射策略的研究。深入分析了对象数据结构以及关系数据结构之 第1 章绪论 后,对对象与关系的映射策略给出了一套方法论的指导。 数据访问与数据持久化模式的深入研究。通过对大量应用系统的分析研 究,将数据访问策略分为三类,即业务逻辑与数据访问相耦合模式、主动 域对象模式、对象关系映射模式在对数据持久化的方法分析研究之后, 将数据持久化模式也分为了三类,即基于通用程序模块、基于数据访问对 象、基于对象关系映射。这些分类只是本人在学习总结的基础上给出的, 并不是权威划分。 数据持久化技术的剖析比较。分析了当今流行的各种数据持久化技术,总 结了各自的优缺点。着重对h i b e m a t e 技术进行了深入的剖析。详细研究 了其实现原理和优势所在。 设计了一个较稳健的数据访问与持久化框架模型( d a p l ) 。在上述理论的 基础上,设计了一个基于分层体系结构的数据层模型,在该模型中应用了 多个设计模式,使模型具有较好的扩充性。 在实际项目中运用了d a p l 模型以科技管理系统作为实现案例,将框架 模型在实际系统中进行了应用,并通过多组测试数据的运行验证了模型的 合理性和有效性。 4 基于h i b e r n a t e 的数据层设计模式的研究与实现 第2 章面向对象、关系理论及映射策略研究 在当今软件领域中,面向对象技术和关系理论无疑是两大热门从八十年代 以来,关系数据库以良好的可操作性和优越的性价比逐渐取代了层次、网状及其 它类型的数据库,成为数据库的主流。建立在关系代数与数学计算基础上的关系 数据模型是数据库发展的标志性成蒯1 0 1 。面向对象的理论是建立在对象的基础上, 它以对象为基本的单位。目前面向对象的研究已处于比较成熟的阶段。实际的应 用系统往往是将面向对象的技术与关系数据库结合来使用,面对象与关系之间的 阻抗不匹配是开发人员的主要困惑。因此对象关系的匹配映射成为研究的热点之 一。目前解决对象与关系阻抗不匹配的有效途径就是建立对象关系的映射。 2 1 面向对象与关系的基本理论 2 1 1 面向对象的基本理论 面向对象技术代表了一种全新的程序设计思路和观察、表述、处理闯题的方 法,与传统的面向过程的开发方法不同,它力求符合人们日常自然的思维习惯, 降低,分解问题的复杂性,提高整个求解过程的可控性、可监测性和可维护性, 从而达到以较小的代价和较高的效率获得较满意效果的目的【1 n 。面向对象技术最 初是从面向对象的程序设计开始的,六十年代s i m u l a 语言标志着面向对象的诞生。 七十年代初期,k a y ,g o l d b e r g 等人设计出了纯面向对象的语言,提出了许多现在 成为面向对象核心的概念,如消息和继承等。随着面向对象程序设计语言的发展, 产生了面向对象的软件工程学,面向对象的开发已成为当今软件开发的主流方法 1 2 1 。 面向对象数据模型是由类构成的层次结构,层次结构是指类与类之间的继承 关系。面向对象的数据模型是用面向对象的观点来描述现实世界实体的逻辑组织、 对象间限制、联系等的模型。它将现实世界的所有实体都作为对象来处理,对象 的属性表示了对象的状态和特征,而对象的操作表示了对象的行为方式。操作包 括接口说明和实现两部分,接口说明声明了该操作的名称、参数列表、返回类型 等;实现是通过某种具体语言编写的代码完成具体操作。外界只能通过消息与对 象进行通信,消息按照对象中的方法说明规定的形式传给对象,对象接收此消息 第2 章面向对象、关系理论及映射策略研究 后调用相应的操作,操作完成后再以消息的形式返回操作结果。面向对象的数据 模型能方便自然地模拟现实世界,对象内部数据及方法实现方式的变化不影响对 象外界的使用,提高了数据的独立性。方法的访问与实现部分分离有利于保证数 据的完整性和安全性,外界不能直接访问修改对象内部数据【1 2 1 1 3 1 。 2 1 2 关系的基本理论 关系是基于数学原理,特别是基于集合论的原理。关系模型是目前数据库系 统中应用最为广泛的数据模型。相对于网状模型和层次模型,关系模型有其自身 的优势,关系模型有严格的数学基础,概念简单清晰、非过程化程度高、数据具 有独立性、更有利于数据管理和数据检索。关系模型由关系数据结构、关系操作 集合和关系完整性约束三部分组成f l o 】。 关系模型的数据结构非常单一,现实世界的实体以及实体之间的各种联系均 用关系来表示。关系模式( r e l a t i o ns c h e m a ) 是关系的描述,关系是关系模式在某 一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不 断变化的,因为关系操作在不断地更新着数据库中的数据。在用户看来,关系模 型中数据的逻辑结构就是一张二维表【l o 】。 2 2 对象与关系映射策略研究 对象模型是基于软件工程的一些原理,例如抽象、封装、继承等,而关系数 据模型则是基于数学原理,特别是集合论的原理,两种不同的理论基础导致各自 不同的优缺点。对象模型侧重于从包含数据和行为的对象中构建应用程序,而关 系数据模型则主要针对数据的存储。对象模型和关系模型这种失配成为“阻抗不 匹配” 1 4 1 。解决这种不匹配就需要进行对象关系映射( o r m ) ,o r m 是指将对象 的状态映射到关系数据库的数据上,以便提供透明的持久性。 2 3 1 映射的基本原则 虽然对象模型与关系模型是截然不同的数据模型,但在各自的领域内都有相 应的概念与另一种数据模型的元素相对应。以下是在迸行对象与关系的映射时遵 循的一些基本原则: 对象模型中的类映射成数据库中的表。 对象模型中的对象标识符映射成表中的主键。 6 基于h i b e r n a t e 的数据层设计模式的研究与实现 对象模型中的类属性映射成数据库表的列。 对象模型中的属性类型映射成表中列的域。 对象模型中的类继承关系映射成数据库中的表,可能涉及多个相关表 2 3 2 类的映射 1 ) 个体类的映射 所谓个体类就是指没有继承关系的类,个体类的映射比较简单。个体类反应 的是现实世界中的独立实体。在数据库设计时这样的实体往往是被设计成一个单 独的数据库表来存储。因此这种映射就是一个类映射一个数据库表,类中的属性 字段依次对应表中的各个列,对象的标识符对应数据库表中的主键。 2 ) 具有继承关系的类的映射t 1 5 1 : 继承关系反映的是基类与子类之间的层次关系,由于子类是从基类继承而来, 有共同的属性,因此如何映射这些相同属性是具有继承关系的类映射的关键。以 下给出了三种可行的映射策略: 整个继承关系映射成一个表。处于继承树上的所有基类和子类的全部属性 集合组成了数据库表的字段集合,这是最简单也是最直接的映射策略。优点是查 询效率高,因为一个表包含了基类和子类的所有数据信息,不需要进行表的关联 操作。缺点是空间利用率低:也就是存储空间存在冗余,因为每个子类可能都有 与其他子类不同的属性,因此表中对应其他子类属性的字段都是空值。这种策略 非常适用于各个子类之间的不同扩展属性比较少,属性主要都集中在基类的情况。 图2 1 所示的是整个继承关系映射成一个表的映射策略。 7 第2 章面向对象、关系理论及映射策略研究 公司主管 岛年薪 怠煨称 岛 员工 普通员工 岛月工资 岛 员工表。 图2 1 整个继承关系映射成一个表 f i g 2 1a n i n h e r i t a n c er e l a t i o ni sm a p p e dt oat a b l e 一个继承路径映射成一个表。换句话说就是每个子类映射成一个表,同时 也包含了基类的属性信息。优点是对应关系明确,一个表构建一个对象。缺点是 重复存储相同的基类的信息。这种映射适用于各个子类的不同属性较多,或子类 的个数较多的情况。如果映射到一个表则会导致该表中每一行都会有很多n u l l 值, 这不仅空间浪费大,而且也会使得该表因列的数目过多而显得既大又混乱,进一 步会影响查询效率图2 2 所示的是一个继承路径映射成一个表的映射策略。 公司主管信息表 岛员工号 岛姓名 。 岛性别 。 岛出生日期 , 岛入职时间 岛年薪t 岛职称 岛 图2 2 一个继承路径映射成一个表 f i g 2 2a ni n h e r i t a n c ep a t hi sm a p p e dt oat a b l e 普通员工信息表 怠 员工号 如姓名 岛性掰 岛出生日期 岛入职时何。 岛月工资 岛 t。期厨 , 号 日时 资 工名别生职薪称工一 员姓性出入年职月 钐影纠彩彩彩易鼬彩 期问 号 日时 工名别生职一 员姓性出入 务彩彩匆勿岛 基于h i b e r n a t e 的数据层设计模式的研究与实现 继承树上的每个类映射成一个表。继承层次上的每个类对应一个表,表中 只存储该类的属性,子类对应的表不存储基类的属性数据。优点是映射简单,一 个类一个表,可以很容易的修改父类或添加子类。因为只需修改一个表即可。缺 点是数据库的访问性能受到影响,因为子类的信息存储在两个或更多个表中,这 取决于继承的层次。图2 3 所示的是继承树上的每个类映射成一个表的映射策略。 系统用户 白用户名 岛用户密码 岛用户类型 岛 教师用户 彩教工号 易职称 岛职务 岛 学生用户 易学号 岛学院 岛专业 岛 图2 3 继承树上的每个类映射成一个表 f 喀2 3e v e r yc l a s si ni n h e r i t a n c et r e ei sm a p p e dt oat a b l e 2 3 3 属性的映射 类的属性对应数据库表中的列,并不是类的所有属性都需要映射,例如类中 可能会有些导出值,这些导出值往往是不需要持久化的。将属性映射成列时通常 的情况是一个属性对应一个表的列。当类属性和表的列是相同类型时,可以直接 进行一对一的映射。但是当类属性不是简单类型或不是数据库支持的类型时,映 射就比较麻烦。例如,有些数据库可能不支持b o o l e a n 类型,这时需要将类属性设 计成字符类型或整数类型。当类的属性不是简单类型对,例如可能是另外一个类 的对象,这时映射会涉及到另外一个表,这属于类之间关系的映射范畴。 2 3 4 关系的映射 对象之间的关系可分为继承、关联、聚合和组合四种关联表示对象间松散 9 第2 章面向对象、关系理论及映射策略研究 的联系,聚合和组合是对象间较紧密的联系,它们是关联关系的特倒。继承关系 的映射已经在“类的映射”部分进行了阐述,下面主要对关联关系和聚合关系的 映射策略进行深入探讨。 1 ) 关联关系的映射 关联是对象之间最普遍的联系,描述给定类的对象之间语义上的连接,表达 对象之间的连接数量关系。根据连接数量可以分为一对一的关联、一对多的关联 和多对多的关联【阍。 一对一的关联。是指一个对象只与唯一一个另外对象有联系,另外对象也 只与唯一一个该对象有联系。反映到数据库中,就是通过将具有一对一关 联的对象对应的表的主键添加到另一个对象对应的表中作为外键,就可以 在关系数据库中实现一对一的关联,外键可以放在关联双方的任何一方。 一对多的关联。实现一对多的关联与实现一对一的关联相似,所不同的是 外键应放在对象关系“多”的一方对应的表中。 多对多的关联该关联实现起来比较复杂,需要增加额外的关联表。关联 表使用自身的主键o l d ,但其属性中必须包含两个相关联的表的主键作为 外键。关联表也是_ 种数据实体,唯一目标是在关系数据库中维护两个或 多个表之间的关联。 2 ) 聚合关系的映射 聚合是关联的特例,表达了对象之间更紧密的关系,是类之间整体与部分的 关系。一个整体类是由多个部分类组成的,整体类和部分类之间的这种关系称为 聚合。例如一辆轿车是由四个车轮、一个方向盘、一个发动机和一个底盘等组成。 聚合关系是更紧密的关联关系,对聚合关系的映射比较通用的做法就是利用关联 关系的映射方法进行映射。聚合关系的映射主要有单表聚合映射和外键聚合映射。 单表聚合映射就是将整体类和部分类的所有属性对应到数据库表中的列。这 种映射模式下,访问和更新聚合对象的记录只需要一次数据库操作,但是在存储 上有一定的冗余,而且部分类的任何改动都会影响到数据库表结构的变化。图2 4 所示的是单表聚合的映射策略。 l o 基于h i b e r n a t e 的数据层设计模式的研究与实现 图2 4 单表聚合映射 f i g 2 4s i n g l et a b l ea g g r e g a t i o nm a p p i n g 外键聚合映射是将整体类和部分类映射到数据库中不同的表,聚合关系通过 外键来表现。使用该模式,读取对应类的记录时需要进行两次以上的数据库操作, 且需要连接操作读取部分类的信息。这种模式减少了整体类和部分类在数据库中 关系的耦合。图2 5 所示的是外键聚合的映射策略。 e m o o y l b e m 叫o y l o 昂e m d o y n a 怕 岛 岛e m 一删删m - 圈2 5 外键聚合映射 r i g 2 5f o r e i g nk e y8 l g g r e g f t t i o l lm a p p i n g 本章的映射策略研究部分详细探讨了具有继承关系类的映射策略、关联关系 的映射策略以及聚合关系的映射策略。不同的映射策略都有各自的优缺点,在实 际的映射实现过程中,要权衡存储效率和检索效率来做出最终选择。映射策略的 选择对持久层的设计和实现至关重要,直接关系到持久层的性能和稳定性。 。竺一 募薹酉 一丽鸵b 舡= 圉图 第3 章数据访问模式与数据持久化策略研究 第3 章数据访问模式与数据持久化策略研究 3 1 数据访问模式 目前大多数的应用系统采用数据库作为数据存储的工具,而数据的处理则是 通过应用程序来实现的。该部分数据访问模式的研究是基于关系数据库的。根据 数据访问在程序中所处的位置,可以将数据访问模式分为三种:业务逻辑与数据 访问耦合模式、主动域对象模式和对象关系映射模式。首先要明确一个概念:域 对象。所谓域对象就是对真实世界实体的软件抽象,也可以叫做业务对象( b u s i n e s s o b j e e t ) 。域对象可以分为实体域对象、过程域对象和事件域对象三类【4 】。 实体域对象可以代表人、地点、事物、概念,例如客户、订单、商品等都可 以作为实体域对象。在j 2 e e 中这些对象可以作为实体e j b ,对于普通的w e b 应用 这些对象可以作为包含状态和行为的j a v a b e a n 。为了使实体域对象与关系数据库 表中的记录相对应,可以为每个实体域对象分配唯一的对象表示符( o l do b j e c t i d e n t i f i e r ) ,o i d 是关系数据库表中的主键。 过程域对象代表应用中的业务逻辑或流程,通常依赖实体域对象。可以把业 务领域中的动词,例如发出订单、登录系统等作为过程域对象。在j 2 e e 应用中, 通常作为会话e j b 或消息驱动e j b 。在普通的w e b 应用中,可以作为常规的 j a v a b e a n ,具有管理和控制应用的行为。过程域对象也可以拥有状态,例如在j 2 e e 中的会话e j b 可以分为有状态和无状态两种类型。 事件域对象代表应用中的一些事件,如异常、警告、超时等。这些事件由系 统中的某些行为触发。例如多用户环境中,当一个客户端程序更新了某种实时数 据,服务器端程序就会创建一个事件域对象,其他正在浏览相同数据的客户端程 序就能够接收到这一事件域对象,随即同步刷新客户界面。 在三层应用程序中,上述三种域对象都位于业务逻辑层,实体域对象是应用 的业务数据在内存中的表现形式,而过程域对象用于执行业务逻辑。 3 1 1 业务逻辑与数据访问耦合模式 由于数据访问的细节位于过程域对象中,而过程域对象本身包含业务逻辑, 因此这种模式称为业务逻辑与数据访问耦合模式。实体域对象只包含了业务数据 基于h i b e r n a t e 的数据层设计模式的研究与实现 模型,作为过程域对象的数据载体来使用。该模式的结构如图3 1 所示。 表示层 文多 业务逻辑层 管? 蠲:豺爿;茹麓鬣三i 数据库层 圈3 1 业务逻辑和数据访问耦合模式 f i g 。3 1c o u p l i n go f b u s i n e s sl o g j ca n dd 砒a 撇铝d e t a i l 这种模式的优点是直接、访问效率高。在多层体系结构中,层次与效率是不 可兼得的两方面,层次越多效率越低。由于过程域对象直接跟数据库打交道,避 免了中间的访问环节,因此效率上是比较高的。缺点是可维护性差、可重用性差。 业务逻辑与数据访问代码混合在一起,一是使得程序的可读性差、维护起来困难, 二是存在大量的重复代码而无法重用。 3 1 2 主动域对象模式 在该模式中,数据访问的细节位于实体域对象中。在实现中封装了关系数据 模型和数据的访问细节,由实体域对象负责自身的数据访问细节,这种实体域对 象也被称为主动域对象。过程域对象只包含业务逻辑,通过对主动域的引用完成 数据访问操作。该模式的结构如图3 2 所示。这种模式的优点是解耦应用程序代码 和数据模型、可维护性较好由于过程域对象中只有业务处理逻辑代码,而没有 包含任何的数据访问代码,关于数据模型的操作是由主动域自身完成的,因此数 据模型的改变不会影响到业务逻辑。缺点是数据访问分布在多个域对象中,限制 了应用程序对数据访问的控制。每个主动域对象都负责自身的数据访问实现,这 就意味着采用全局性的数据访问策略需要在每个主动域对象中重复相似的代码。 第3 章数据访问模式与数据持久化策略研究 表示层 :? 卜1 二,竺务逻辑望 之乡 数据库层 图3 2 主动域对象模式 f i g 3 2a c t i v ed o m a i no b j c c tp a t t e r n 3 1 30 r m 模式 在这种模式中,数据访问细节被封装在一个被称为持久层的层次中,而实体 域对象只包含业务数据,过程域对象只包含业务逻辑。在这种模式中实现数据的 访问需要借助第三方的对象关系映射工具来完成。该模式的结构如图3 3 所示。 表示层 之上一 业务逻辑层 r 。_ 实体壤对象、。 e过程域对象7 薹 l ( 业务散据) 7 卜_ i ( 业务逻辑) ,】 通过对对象图的导航来获褥对象。这种方法适合于存在关联关系的对象, 从一个已经加载的对象开始,由它的属性访问方法来访问相关联的对象。 通过使用h q l 语言来加载对象类似于关系数据库中的通用s q l 语言, h i b e r n a t e 提供了对象操作的h q l 语言( h i b e r n a t eq u e r yl a n g u a g e ) ,h q l 语言以面向对象的操作方式代替了关系语言 通过h i b e r n a t e 的c r i t e r i a a f i 来获得对象c r i t e r i a a p i 提供了一个类型安 全的、面向对象的方法来执行查询,它包括了基于实例对象的查询。 另外h i b e r n a t e 在加载具有关联关系的对象上提供了如下四种获取策略。 立即获取使用连续的数据库读操作或缓存查找,关联关系所涉及的所有 对象被全部获取。 延迟获取。延迟获取可以让用户决定第一次访问数据库时有多少对象和哪 些关联要被装载,并不是将全部对象都加载到内存中默认情况下,对关 联的获取策略都设为延迟获取 渴望获取。明确的说明了哪些关联对象应该和参照对象起加载。 h i b c r u a t e 利用外连接查询在一次数据库请求中返回关联对象,一种普遍的 做法是为一个特定的h q l 或者标准查询说明使用这种获取策略。 批量获取。它并非严格的关联获取策略,而是一种改善延迟获取或立即获 取性能的技术。 第3 章徽据访问模式与数据持久化镱略研究 事务是数据库操作的最小单元,总是作为一个整体来进行工作。通常情况下一 个事务是由几个任务组成的,如果一部分任务失败,则整个事务失败。当事务失 败时,系统必须返回到事务开始前的状态,这个过程称为“回滚”事务具有四个 典型的特性:原子性、一致性、隔离性、持久性【1 0 1 在h i b e r n a t e 中,t r a n s a c t i o n 接口负责处理事务操作,它有两种类型的实现,即j d b c t r a n s a c t i o n 和 j t a t r a n s a g t i o n 。在默认情况下,h i b e r n a t e 使用j d b c t r a n s a c t i o n 作为t r a n s a c t i o n 的实现。当h i b e r n a t e 被嵌入到j 2 e e 应用服务器中时,可以通过h i b e r n a t e 的配置 文件将t r a n s a c t i o n 的实现配置为j t a t r a n s a c t i o n ,然后由具体的应用服务器内的事 务服务查找类来定位具体的j t a t r a n s a c t i o n 实现。 缓存是提升系统性能的关键因素之一,它的主要作用是减少i o 操作和计算操 作。相对于内存操作而言,数据库调用是一个代价高昂的过程,对于典型的企业 应用结构。数据库往往与应用服务器位于不同的物理服务器,这就意味着每次数 据库访问都是一次远程调用,s o c k e t 的创建与销毁、数据的打包与拆包、数据库 执行查询命令、网络传输上的延时,这些消耗都给系统整体性能造成了严重的影 响。这时缓存的价值就凸现出来了。h i b e r n a t e 提供了两级缓存,即s e s s i o n 的缓存 和s e s s i o n f a c t o v y 的外置缓存。第一级缓存是s e s s i o n 的缓存。在这一级缓存中, 持久化类的每个实例都具有唯一的o h ) ,由于s e s s i o n 对象的生命周期通常是对应 一个数据库事务,因此它是事务范围的缓存。第一级的缓存是必须的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 41815.4-2026信息技术生物特征识别呈现攻击检测第4部分:移动设备测试轮廓
- 《有趣的色彩仿生设计》表格版教案-2026-2027学年冀美版(新教材)小学美术四年级上册
- 《影视鉴赏》第四章
- 露天矿轮斗挖掘机司机岗位专业实务考核试卷含答案
- 热浸镀工岗中安全文明考核试卷含答案
- 贵金属精炼工岗中实操知识水平考核试卷含答案
- 2025年职业技能鉴定理论测试卷:财务会计实务操作冲刺试题
- 2025年中储粮集团河南分公司招聘(114人)笔试参考题库附带答案详解
- 2025年中级统计师《基础知识》试题及答案(新版)
- 2025年重庆万州教育局直属学校公开招聘试题含答案
- 担保合同范本
- 中职英语1 基础模块 Unit 3 shopping
- 全民国防教育日忆九一八事件勿忘国耻勇毅前行课件
- 简易砌墙合同范本
- 探讨在预防接种中如何与家长有效沟通
- 20X101-3 综合布线系统工程设计与施工
- 全国职业大赛(中职)产品数字化设计与开发赛题库共计10套
- ICU肺部超声基础
- 城乡供水一体化
- 2023年包河区青少年信息学(小学组)竞赛试题
- 煤矿井下电气作业题库
评论
0/150
提交评论