已阅读5页,还剩102页未读, 继续免费阅读
(计算机应用技术专业论文)一种高效的对象关系映射技术的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 在当今的数据库应用开发中,将面向对象程序开发设计与基于关系模型的关 系数据库一起使用是一件十分麻烦、费时的事。对象关系映射o r m 就是用来将 对象模型表示的对象和基于关系模型的数据结构相映射的一种技术。它可以有效 的简化在上述环境下进行数据存储、访问开发的复杂度并且减少开发编程量。 当今,在j a v a 平台上,有很多流行的对象关系映射技术。然而,这些技术还 有其各种各样不完备、不适用的缺陷。 本文论述了一种根据现实o r m 应用需求而提出的高效的o r m 技术的研究 与实现。它基于从关系模型到对象模型的映射方向,从而符合了大多数数据库应 用开发的一般流程;它具有简单清晰的映射模式,将关系模型中实体及其之间关 系直接映射为数据访问对象,既简化了映射模式,又能在对象模型中充分表达原 始关系模型中实体之间的关系;它用代码生成的方式通过构建数据访问层来实现 映射及访问数据库的具体过程,在实现上简化了数据访问层的设计,做到了羽量 级访问,方便了对访问过程的追踪调试,平衡了透明性和现实需求之间的矛盾: 同时,在实现上通过应用基于对象的查询模型等诸多实现策略,在进行对象关系 映射的过程中,提高了对数据的查询能力和运行效率。 本技术所提出的对象关系映射的方向及模式是一种融合对象、关系两种模 型,发挥各自特长的有效思路。本技术对于实现低代码量、高速度、高质量、易 控制的高效数据库应用开发具有现实应用意义,并且在项目实践中得到了具体体 现。 关键词持久化:对象关系映射;代码生成 a b s t r a c t i nn o w a d a y sd a t a b a s ea p p f i c a f i o nd e v e l o p i n g ,t h ec o m b i n a t i o nu s a g eo fo b j e c t o r i e n t e dp r o g r a m m i n ga n dd e s i g na n dr e l a t i o n a ld a t a b a s eb a s e d o nr e l a t i o n a lm o d e l s i sat i m ew a s t i n gt r o u b l e s o m et h i n g o b j e c tr e l a t i o n a lm a p p i n gi s at e c h n o l o g y w h i c hi su s e dt om a pb e t w e e no b j e c t sr e p r e s e n t e db yo b j e c tm o d e l sa n dd a t as t r u c t u r e b a s e do nr e l a t i o n a lm o d e l st h a tc a ne f f e c t i v e l ys i m p l i f yt h ep r o c e s so f d a t as t o r i n ga n d a c c e s s i n ga n dr e d u c et h ec o d ew o r ko f d e v e l o p i n g i nj a v al a n g u a g ed e v e l o p i n gp l a t f o r m ,n o w , t h e r ea r em a n yp o p u l a ro b j e c t r e l a t i o n a lm a p p i n gt e c h n o l o g i e s ,n e v e r t h e l e s s ,t h e s et e c h ss t i l lh a v et h e i ro w n d e f e c t s o ff a u l t yo ri n a p p l i c a b l e t h i st h e s i si n t r o d u c e st h er e s e a r c ha n di m p l e m e n to fa ne f f e c t i v eo r m t e c h n o l o g ya c c o r d i n gt ot h er e a la p p l i c a t i o nd e m a n d so fo b j e c tr e l a t i o n a lm a p p i n g t h i so r mt e c hi sb a s e do nt h ed i r e c t i o nf r o mr e l a t i o n a lm o d e l st oo b j e c tm o d e l s w h i c hi ss u i t a b l ef o rt h em o s to fd a t a b a s ed e v e l o p i n gp r o c e s s e s ;i ta l s oh a ss i m p l e a n dc l e a rp a t t e r n so fm a p p i n gt h a tc a ns i m p l i f yt h em a p p i n gp a t t e r n sa n dr i c h l y r e p r e s e n tt h er e l a t i o n sb e t w e e ne n t i t i e sw i t h i no r i g i n a lr e l a t i o n a lm o d e l si no b j e c t m o d e l sb yt h ed i r e c tm a p p i n gw a yt h a tm a p st h ee n t i t i e sa n dr e l a t i o n si nr e l a t i o n a l m o d e l st od a t aa c c e s so b j e c t s t h et e c hu s e sc o d eg e n e r a t i o nt oc o n s t r u c td a t a a c c e s sl a y e rt oi m p l e m e n tt h ep r o c e s so fm a p p i n ga n dd a t a b a s ea c c e s s b yt h ew a y o ft h i s ,i ts i m p l i f i e st h ed e s i g nw o r ko fd a t aa c c e s sl a y e r ;a c h i e v e st h el i g h ta c c e s s ; f a c i l i t i e st h et r a c i n ga n dd e b u gw o r k ;b a l a n c e st h et r a n s p a r e n tu s a g ea n dr e a ld e m a n d s m e a n w h i l e ,b yt h er i s eo fm a n yi m p l e m e n ts t r a t e g i e ss u c ha so b j e c tq u e r ym o d e l s ,i t i m p r o v e st h ed a t aq u e r ya b i l i t ya n di n c r e a s e st h er u n n i n ge f f i c i e n c yi nt h ep r o c e s so f o b j e c tr e l a t i o n a lm a p p i n g t h eo b j e c tr e l a t i o n a lm a p p i n gd i r e c t i o na n dp a t t e r n so ft h i st e c h n o l o g ya r e e f f e c t i v ew a y st oc o m b i n eo b j e c ta n dr e l a t i o n a lm o d e l sa n de x e r tt h e i ra d v a n t a g e s t t t i st e c hh a sr e a ls e n s et oa c h i e v ee f f e c t i v ed a t a b a s ea p p l i c a t i o na n dd e v e l o p i n gw i t h a d v a n t a g e so fh i 曲p e r f o r m a n c e ,s a v i n gc o d i n g ,h i 曲q u a l i t y , e a s yc o n t r o lw h i c hw a s c o n c r e t e l yp r o v e di nr e a lp r o j e c tp r a c t i c e s k e yw o r d sp e r s i s t e n c y ;o r m ;c o d eg e n e r a t i o n i i i 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得北京工业大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 签名: 孥嘿巡p 关于论文使用授权的说明 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的论文在解密后应遵守此规定) 躲乎新虢牟扯 日期: j 一口厂广工护 第1 章绪论 第1 章绪论 1 1 研究背景 数据是任何计算机应用所涉及的最重要方面之一。从某种意义上讲,计算机 应用程序的核心就是访问及处理数据。目前,面向对象方法学早已应用于各类软 件系统的开发过程中。然而,虽然面向对象的开发方法逐渐成为主流,但程序设 计开发者还不得不继续使用关系型数据库作为存储数据的主要载体。这一方面是 由于关系型数据库的关系型理论或者其产品本身的成熟性,使设计开发人员不想 更改为其它的类型;另一方面也是由于,诸如面向对象型等其它形式的数据库的 不成熟或是低效性使得目前没有其它更好的选择。 关系数据模型是基于关系的数学概念,并且建立在结构化的分析设计之上【”。 它的提出目的是实现规范化数据存储。相比之下,面向对象技术( o o t ) 、面向 对象方法学( o o m ) 是基于对象模型,建立在对象化的分析设计之上。面向对 象模型设计的目的是通过创建具有数据和行为的,并且具有更加复杂关系的对象 来描述现实世界,实现过程。两种模型各自有不同的优缺点。关系模型的优势是 数据存储,但体现不了与现实事物相联系的行为。对象模型的优势是模拟现实, 但对于如何存储数据的问题,对象模型除了规定了对象具有持久对象和非持久对 象的概念外就没有任何有关数据存储的内容了。对此,可以明显的看出,两种模 型存在相互结合的必然趋势,因为它们分别在存储和建模两方面各具优势,而同 时在另一方面有所不足。然而,在对象模型和关系模型之间存在着“阻抗不匹配” 2 1 。使用对象范例,需要通过它们之间的引用来访问对象,而使用关系范例,则 需要通过复制数据以及关系代数来联接表中的元组。 在开发实践中,这种基本的差异导致两种模型的结合并不理想,造成了模型 之间耦合的增加、复杂程度的提高、代码复用性的降低,以及随之带来的开发工 作量及难度的加大。 对此,如何在两种模型上进行映射从而实现模型的统一的研究已经有较长时 间的历史,据此提出的模式、技术众多。这些方式的共同点是都基于对象模型和 关系模型两者相映射的可能性理论基础,并在模式级上应用某种对象模型与关系 北京l - 业大学工学硕士学位论文 模型相映射的模式,在模型级上应用依据这种模式的某种对象关系映射模型,形 成即所谓的对象关系映射技术。对象关系映射技术的提出就是要通过映射实现差 异性的融合,简单化两者统一的过程,至少使开发者减少对它的关注程度,减少 在这项工作上所花的时间、精力。 1 2o r m 技术概览 对象关系映射( o b j e c t - r e l a t i o n a lm a p p i n g ) 简称o r m 是一种转换对象模型 和关系模型的过程【3 】。它是在信息系统设计中应用的一种概念级的建模方法。 o r m 技术是将o r m 这个概念转变为现实的技术。它可以是一种方法论、一个 系统或者任何支持o r m 使得它脱离概念,应用到现实的事物。在实现上,o r m 技术提供了这样一种工具或是平台,它能够帮助将面向对象程序中的数据转换成 关系型数据库中的记录;或是将关系数据库中的记录转换成面向对象程序中便于 操作的对象。 o r m 技术首先包括的是一套有关映射的方法论。毕竟它所处理的是两种差 别较大的建模方法所建立的不同模型。因此o r m 技术需要具有如何进行映射的 一般化做法,可以称作为映射模式( m a p p i n gp a t t e r n s ) 。基于某种映射模式,o r m 技术还需要具有辅助开发者完成映射的系统。这个系统根据所应用映射模式的不 同以及自身映射实现方式的不同而不同。它所提供的功能是完成映射的实现过程 并且在一定程度上减少开发者的工作。 早在面向对象设计、开发的应用之初,开发者就已面临如何映射两种模型, 如何通过对象访问关系数据库的问题。时至今日,针对o r m 的技术很多,在j a v a 语言开发平台上,例如有j d b c ,e j b 、j d o 等。这些技术都提供了在对象模型 中以某种映射方式访问关系数据库的方法。它们因映射模式以及实现方式的不同 有较大的差异。 j d b c 是一种面向s q l 的应用程序接口( a p i ) f 4 l 是j a v a 体系结构中有关 关系型数据库访问的重要组成部分。应用j d b c 访问关系型数据库可以说是最原 始、最直接的方法。当然这也可以说是一种对象关系映射的技术。然而,这种方 式是针对关系模型的抽象的访问过程的封装。它通过封装对关系数据库的操作过 程以及其所涉及的数据库连接、语句、结果集等对象的形式来实现访问关系数据 2 第1 罩绪论 库的目的。因此严格的讲,j d b c 只能作为a p i 级的访问基础,而非完整的o r m 技术。 e n t e r p r i s ej a v a b e a n s 是j a v a 2 企业版( j 2 e e ) 平台中提供的分布式组件构架, 其作用是为多层应用程序提供中间层服务i5 、。其中实体b e a n ,包括容器管理持久 性( c o n t a i n e rm a n a g e dp e r s i s t e n c e ,简称c m p ) 和b e a n 管理持久性( b e a n m a n a g e dp e r s i s t e n c e ,简称b m p ) 是被推荐用来表示和访问关系数据的方式。简 单的说,实体b e a n 实现的对象关系映射过程是通过e j b 容器依据用户指定的对 象与数据库中实体、关系相映射的方式在运行期间将对象持久化到关系数据库的 过程。由于其具有基于组件的设计,标准化、透明的容器管理的持久性服务、以 及较灵活的事务支持等特性,使之成为系统级分布式计算中实现对象持久化的流 行方式。 s u n 的j a v a 数据对象( j d o ) 规范的目标是向j a v a 程序员提供面向对象持 久数据急需的轻量级的视图引,它满足了程序员一直强烈要求得到的一个实体 b e a n 的轻量级替代技术的需求。简单的讲,它是一种通过开发者指定映射策略, 由j d oa p i 自动编译完成持久化对象访问关系数据库或者其它存储介质的过程 的技术。相对于该领域中的前两种方法:j d b c 和e j b 中实体b e a n ,j d o 依靠 生成数据访问对象( d a t a a c c e s so b j e c t ) 实现了一种对象关系映射的解决方案: 同时较实体b e a n 相比,因为j d o 自动处理持久对象的持久过程,映射到数据存 储,使开发人员只需编码持久对象的业务逻辑,丽对于持久对象和数据存储之间 的交互几乎是透明的,因此有更大的开发易用性。 除了以上标准的对象关系映射策略外,随着人们对o r m 在开发中的重要作 用的认识的逐步提高,越来越多的o r m 技术相继产生。当前比较流行的包括采 用框架模式的h i b e r n a t e ,提供持久化a p l 支持的a p a c h e 的o b j e c t r e l a t i o n a l b r i d g e o j b 等。这些技术由于针对不同的开发应用领域。有着各自对映射问题的不同 视点,所提出的映射模式方法各不相同,实现方式更是干差万别。 1 3 研究现状分析 通过以上论述可以看出,目前针对对象关系映射技术的研究已经取得了一定 的成果。然而o r m 技术虽然众多,但每种技术都有其各自的优势及不足。它们 北京工业大学工学硕士学位论文 要么映射模式不够理想、要么应用复杂,少有一种能够做到比较完美或者能够在 诸多应用需求中实现良好的平衡。 首先,从对象模型和关系模型之间的映射方向性的角度来讲,既可以采用从 对象模型出发向关系模型映射的方式,又可以采用从关系模型出发向对象模型映 射的方式。目前似乎前一种方式更显主流。例如,s u n 在j d 0 中就是应用这种 映射方向。而在实际处理对象模型和关系模型之间的映射过程中,由于关系模型 具有先天的数学基础,较对象模型在数据存储方面更加贴近现实需求,因此,关 系模型的设计过程更加规范,往往要先于对象模型设计。所以,通过实践发现从 关系模型出发的映射方向更能表达、贴近开发需求,而在各种映射技术中很少有 采用从关系模型到对象模型映射方向的映射模式。 其次,高效的开发和运行效率是目前数据库应用开发中广泛追求的目标。在 现存技术中,例如c m p 和j d o 都采用了通过技术自动实现映射过程的策略。这 明显减少了程序员的工作负荷并提高了工作效率。这是开发者追求的。但同时也 应该看到,c m p 和j d o 所采用的通过运行期间具体实现映射和持久化过程的策 略虽然动态性较高,但运行效率较低。这无疑增加了这种自动操作策略的成本。 因此,如何在自动性和由此产生的成本之间进行平衡的问题是目前某些技术尚未 很好解决的。 再次,技术应用过程中的透明性可以降低应用的复杂性,因此成为了各项技 术追求的目标。但是,虽然技术的透明性是一件好事,而过分的透明或者单一的 透明,即,只能透明,没有其它选择,就不见得是件好事。因为一项技术如果透 明到什么都透明了,并且让人无法介入这技术的实现过程,这将加大程序调试、 追踪的难度。例如j d o 所采用的字节码修饰技术会产生程序调试的困难。可见, 过分的技术透明性会让人感到对这项技术无法控制,并且提高了技术的应用风 险,降低了对此技术的应用信心,对于提高效率来说反而适得其反, 最后,基于关系代数的运算和丰富高效的查询功能是关系数据库存在至今的 原因之一。在进行映射之后,由于需要遮蔽体现关系模型的s q l 语句,因此如 何实现对数据的查询功能是各种映射技术都需要解决的问题。对此,有的技术, 例如实体b e a n 和j d o 分别提出了类似s q l 的基于语义的查询语言e j b q l 和 4 第1 罩绪论 j d o q l 。这些查询语言的引入虽然使得开发者摆脱了s q l 的束缚,但它们在功 能上明显逊于s q l 而且它们对s q l 的取代是完全的取代,没有使两者相互共容、 取长补短的可能性机制。而其它有些技术的查询机制在查询效率上由于受到映射 的影响而明显降低。 由于目前的o r m 技术还不能在各个方面都平衡的满足开发者的需要。因此, 目前在大多数的数据库应用开发中,开发者还保持着应用j d b c 或者以j d b c 为 基础,自己设计、开发数据访问对象( d a t aa c c e s so b j e c t ,简称d a o ) 来进行 映射的做法。这种做法虽然能够满足开发的需求,但是它费时费力,并且开发质 量不能保证。因此,开发者广泛需要一种能够实现缩短开发周期、降低开发难度、 提高开发质量、应用复杂度低且应用轻量级、具有平衡的技术透明性的对象关系 映射技术。本文所论述的高效的对象关系映射技术( e f f e c t i v eo b j e c tr e l a t i o n a l m a p p i n g ,以下简称e o r m ) 就是针对这个目标提出的。 1 4e o r m 的研究目标及内容 e o r m 的设计目的就是要提出一种针对上文所述目前o r m 技术的不足,实 现高效的对象关系映射的技术。其中高效一词的含义就是本技术所需实现的基本 目标,主要体现在以下几个方面: 首先、实现o r m 技术所应该实现的基本功能。在软件工程中,高内聚和低 耦合、较高的代码复用是系统设计的重要原则。o r m 正是针对这些需求所提出 的。因此,e o r m 必须做到其它o r m 技术所实现的例如s q l 隐藏、数据访问 层设计等旨以在持久化过程中降低两种模型之间的耦合程度,实现数据访问过程 与其它逻辑、表示分离,提高代码复用的功能。 其次、降低开发周期,提高开发质量。高效的重要体现因素之一是高速。时 间历来是关系到项目成败的原因之一。因此项目开发要求所应用其中的技术能够 充分体现其在开发速度上的优势,因此要求有关映射的开发过程不应该成为一个 耗时的工作。同时,技术需要保证映射过程本身的正确,并且要具有对此过程进 行检查、干预的能力。这样不仅可以通过映射避免以往人为实现过程中错误的产 生,并且可以及时发现错误,进行补救。 再次、做到技术应用复杂度低及应用轻量级,以提高技术应用的适用性。这 北京工业丈掌工学硕士掌位论文 里的技术应用既是指在开发过程中对技术本身的应用,也是指最终用户对应用此 种技术所开发的产品的应用。无论是哪种应用,好的技术不应该过分提高用户的 应用门槛,或是使之成为一个重量级过程。只有这样才能使技术有广泛的适用场 台。不论是开发基于c l i e n t s e r v e r 体系结构还是基于b r o w s e r s e r v e r 体系结构或 是其它形式的软件系统,它都应该有用武之地。 最后、技术透明和不透明性之间的平衡。开发技术的透明性可以降低开发过 程中的复杂程度,但是透明性必然会影响技术的功能性及灵活性。因此,如何在 功能及透明性问题上平衡成为了一个值得权衡的问题。对于如何“权衡”这个问 题,虽然技术的提供者很难为技术的使用者做出合适的选择,但至少应该提供技 术透明与不透明之间的转换功能,给使用者提供进行“权衡”的机会。 由于以上各项需求之间可能存在相互的关系或制约,因此一味的追求某项效 率的提升可能会影响其它目标的实现。例如,单纯追求技术的功能性很有可能会 导致系统复杂度的提高。因此,e o r m 对以上诸多要求的实现不是单纯的一味 的追求,而是种对各个要素之间的平衡式的追求,只有这样才能促进技术整体 效率的提高。这也是e o r m 所提倡的高效一词的另外一个含义。 针对实现以上高效对象关系映射的目标,对于e o r m 的研究内容主要包括: 提出一套对象关系映射模式及依据这种模式的映射模型。在实现上提出实现映射 的具体方式,并且在对象封装形式、查询功能等实现细节上针对高效性的需求提 出具体实现策略。 1 5 本章小结 本章介绍了对象关系映射技术在数据库应用开发中的研究、应用背景。并且 概要的介绍了当今主要对象关系映射技术的特点以及它们的不足之处。针对这些 不足,本章提出了设计、实现高效的对象关系技术e o r m 所需要达到的高速、 高质、复杂度低、应用轻量级等基本目标。 第2 章技术组成及架构 第2 章技术组成及架构 2 1 技术概览 本文所研究实现的e o r m 是一种高效的对象关系映射技术,它包括一套对 象关系映射模式,这种模式采用了从关系模型到对象模型的映射方向,基础而简 单。沿着从关系到对象的映射方向,映射模式可以实现将关系模型中的实体( 本 文在表述上将普遍用于关系模型设计的实体关系模型作为关系模型的逻辑代表) 以及实体之间的关系进行映射。在此映射模式的基础上,e o r m 通过自动代码 生成的方式实现具体访问数据库的过程。在应用本技术的开发者眼中,他们在本 技术所提出的映射模式的指导下,可以通过定义具体映射模型,并且利用e o r m 提供的代码自动生成功能,获得由访问关系数据库的数据访问对象以及辅助支持 a p i 所构成的一个数据访问层。 2 。2 映射方向 对象关系映射必须基于某种映射模式,而映射方向是决定映射模式前提。对 象关系映射是具有方向性的。即从对象模型向关系模型映射还是反之。映射之所 以具有方向性是因为在两种模型之中毕竟有一个要先于另一个产生,或者一个要 基于另一个的设计而产生。究竟是应该从对象到关系映射还是从关系到对象映射 的问题是一个值得讨论的问题。 针对对象关系映射的研究产生于上世纪8 0 年代末期,这个时期也几乎是面 向对象程序设计及面向对象开发方法的诞生初期。可见对对象关系映射的研究与 对面向对象方法理论的研究有着密不可分的联系。由于人的思维惯性总是将新产 生的事务去适应已产生的事物。因此,在那时,人们的主要的研究课题是如何将 新兴的对象模型去适应或者说是映射到产生于7 0 年代末期的关系模型。对此, 提出了众多从对象模型到关系模型的映射模式。这也是对象关系映射一词 “o r m ”中o b j e c t 对象一词要先于r e l a t i o n a l 关系一词的原因。它体现了从对象 到关系映射的初衷。在现今的映射技术中,绝大多数都是基于从对象模型向关系 模型映射的技术。例如h i b e r n a t e ,j d o 等,它们的特点是根据持久化对象的关 系,例如继承、关联等关系,通过映射生成关系模型,并且实现对象在关系数据 北京工业大学工学硕士掌位论文 库中的持久化操作等。比如h i b e r n a t e 就是通过s c h e m a 生成器根据所需映射的对 象模型和映射方式,生成在关系数据库中的数据定义语言d d l ,进行建表等操 作,生成与对象模型相映射的关系模型。 但是,这种映射方向有着它内在的映射复杂性。由于对象模型是更加复杂的 模型,表现在其对象之间的关系更加复杂,使得其无法在简单的关系模型中得到 完美的反应。例如对象之间的最普通的继承关系,就起码有三种不同的模式将这 种关系映射到关系模型中。每种模式各有其优缺点,没有一种做到完美。毕竟用 一种简单的模型映射一种复杂的模型是很难做到十全十美的。这也是在自o r m 诞生的近2 0 多年里,至今没有一种从对象到关系模型的映射模式可以成为统一 的映射范式的原因。与此同时,人们也在另一个方向上进行着尝试。 从理论上讲,用一种较为复杂的模型表现一种较为简单的模型是具有可能性 的。当人们将关系模型映射到对象模型后,就没有了先前诸如如何统一的映射继 承关系的问题,因为任何实体之间的关系都能够用对象之间的关系表达。同时, 由于关系模型由设计产生,而不是由映射产生,开发者依旧可以发拜关系模型所 具有的坚实的数学理论基础、统一的规范过程的优势,从而制定完美的数据存储 结构。因此,在现实的数据库应用系统开发实践中,开发者往往倾向于从设计关 系模型开始,如果需要面向对象程序语言实现,继而再转向对象模型的建模。也 就是说,研究从关系模型到对象模型方向的映射更具有实践的意义,它来自于日 常的开发实践需求。 鉴于以上原因,e o r m 技术的映射方向采用了目前o r m 技术较少采用的从 关系模型到对象模型的映射方向,并在此映射方向下提出具体的映射模式。至于 从对象到关系模型的映射,e o r m 虽然没有提供任何映射模式、或者实现的支 持。但是,如果需要进行从对象到关系的映射,它也可以作为辅助技术,实现桥 梁或者纽带的作用。例如,在开发者在完成对象模型的设计后,可以随后按照传 统的方式进行关系模型设计,然后借助e o r m 进行关系模型到对象模型的映射。 虽然其映射结果可能与先前设计好的对象模型有一定出入。但是由于毕竟这是两 套对象模型,在两者之间可以通过进一步封装进行一定的融合使得两者成为一套 对象模型。从而使得本技术对于从对象到关系的映射也有其用武之地。 第2 罩技术组成及架构 2 3 映射模式 由于e o r m 选择了从关系模型到对象模型的映射方向,因此需要提出在此 映射方向下的映射模式。映射模式的研究对象是已经建立好的关系模型,研究范 围包括模型中实体、实体之间的关系如何映射为对象模型的过程。以下论述了 e o r m 所采用的映射模式。包括实体映射中实体属性、属性域、键包括主键和 外键到对象模型的映射模式。以及在关系映射中实体之间一对一、一对多、多对 多以及自关系等关系到对象模型的映射模式。 2 3 1 实体映射 实体在物理上是由行和列组成的数据库表。实体中的每一个行是一个元组, 它们是实体的属性所约束的实体的具体体现。相类似,对象是包含数据和过程 的具有继承等特性的包,而对象的实例是符合这个模板的例子。这种相似性是关 系模型和对象模型之间映射的可能性基础。在e o r m 的实体映射模式中,一个 关系模型中的实体对应一个对象模型的类,随之表中的元组将映射成为对象实例 的对应。 2 3 1 1 属性 对于实体来说,其属性就是物理上关系数据库中表的列。对于对象来说,其 属性是体现对象状态的信息。对于状态,具有持久状态及瞬时状态的区别,因此 对象属性可以分为持久化属性和非持久化属性。对于实体属性和对象属性的映射 来说,由于对象的持久化属性是有必要持久化保存的,因此对象属性和实体属性 之间的映射是对象的持久化属性和实体属性之间的映射。因此,在对象属性和实 体属性的映射中,一个在物理上表现为一个表的列的实体属性可以对应一个这个 实体所映射的对象的一个持久化属性。这就是e o r m 所采用的实体属性到对象 属性的映射模式。 2 3 1 2 域与类型 域是一个或者多个实体属性的取值集合。类型是对象属性的类型。在关系数 北京工业大学工学硕士掌位论文 据库中定义了很多域,例如可变长度字符串v a r c h a r ,整型i n t e g e r 等。在对象模 型中,对象的属性具有类型。在j a v a 语言中,类型可以为n u l l 类型、基本类型 或参量类型” 。比较而言,域的定义更加精确一些。在关系数据库中,域对其保 存的值的范围有着更加精确灵活的定义,例如可变长度字符串的长度可以定义为 规定的值。这主要基于其存储结构上的考虑。从不涉及精确程度的数据类型上讲, 域与类型( 基本类型或其对象封装类) 之间可以进行完全的映射,例如整型域与 整型类型之间。但是如果要保证域的精确度定义得以映射,例如要映射长度为8 个字符的字符串v a r c h a r ( 8 ) ,则由于基本的对象类型可能没有相关的细致定义而 造成映射的失真。这种精确程度的不一致可能造成在映射的实现过程中对象持久 化至关系数据库时产生错误。解决这个问题需要额外的对对象属性类型的取值空 间进行限制。这个限制可以在业务过程中实现,例如限制用户输入,也可通过在 模式一级对关系模型中的域进行精确的映射来实现。例如对于长度为8 个字符的 字符串v a r c h a r ( 8 ) ,需要定义特殊的类型,其基本的类型为字符串类型,并且在 其实例化过程中加入长度为8 的约束。由于精度的失真可以在实现中具体解决, 因此e o r m 对于域与类型的映射所要求的精度不高,只要求在类型上选择相近 的类型。 此外,从技术实现的角度考虑,由于e o r m 采用了基于代码生成的实现过 程,因此为了实现的简单,要求与实体属性的域相映射的类型不能为基本类型, 而必须是参量类型。例如,如果整型的属性域要映射成为整数类型,则应该选用 参量整数类型i n t e g e r 而不是基本类型缸。这个限制是基于实现所规定的,而且 由于e o r m 具有跨语言进行实现的考虑,因此为了适应有些纯面向对象语言( 表 现之一是所有数据类型定义都是对象,没有基本类型数据定义) ,对此进行限制 也是有必要的。 2 3 1 3 键 主键是唯一标识实体中元组的属性。不同的元组通过其主键的不同相互区 别。类似,在对象建模中,要求每个对象实例之间需要相互区分。但是在对象模 型中并没有规定对象的这种相互区分的机制是持久化的。也就是说,在对象实例 的生命周期中,其相互之间可以通过运行期间的参量或者h a s h 码相互彼此区别。 1 0 第2 罩技术组成及渠构 但是一旦对象实例被持久化至关系数据库,由于其参量信息是运行期间内存分配 的信息,具有不确定性,不可能作为唯一标识实例的信息保存。而对于h a s h 码, 由于可能存在不同对象实例具有相同h a s h 码的可能,因此也不能作为持久化对 象的唯一标识保存。 由于实体中的属性是和对象属性相映射的,而主键是实体中唯一标识元组的 属性。因此可以试想将主键映射为对象中键所映射的属性是可行的。这些主键所 映射的属性可以定义为主键属性。在关系模型中,主键的定义可以有一个或者多 个,多个主键构成复合主键。对于e o r m 来说,多个主键映射为相应的多个主 键属性是可以的。但是这里需要指出,由于存在复合主键的关系模型设计所体现 的例如规范化上可能造成的缺陷( 复合主键的设计不当可能造成关系不符合第二 范式2 n f ,而如果一个关系只有单一主键,则其必然至少符合第二范式) 使得这 种设计越来越少。因此,e o r m 的映射模式约定,但不强制,关系模型中的各 个实体的唯一主键属性与和实体所映射的对象的主键属性相映射。 实体之闻的关系是通过实体的主键以及外键维护的。实体a 与b 之间的关 系通过a 或b 的主键在b 或a 上作为外键来体现。例如实体a 具有主键p k a , 实体b 具有主键p k b 。a 和b 之间的某种关系可以用b 的主键在实体a 中作为 外键表达。如图2 1 。 臣丑一书 图2 1 以主键及外键维护的关系 f i g u r e2 - 1ar e l a t i o nm a i n t a i n e db yp r i m a r yk e ya n df o r e i g nk e y 当实体a 映射为对象,例如d a o a 后,就需要考虑如何映射属性p k b 的问 题。由于p k b 是体现关系的外键属性,因此对它的映射要求能够在映射之后保 证这种关系的保留。对此,e o r m 提出以下模式映射外键属性: _ 如果实体e l 和e 2 存在某种关系,并且这种关系通过e 2 的主键p k e 2 在e 1 中作为外键f k e i 来体现,则e 1 中的外键f k e 1 将映射为e 1 所 映射的对象d a o e l 的外键属性f p d a o e l ,此属性的类型为e 2 所映射 的对象d a o e 2 的类型。 1 1 北京工业大学工学硕士学位论文 例如,图2 一l 例中,实体a 、b 分别映射为d a o a ,d a o b ,a 中外键p k b 映射为d a o a 中外键属性f p d a o a ,其类型为d a o b 。 图2 2 实体a 、b 所映射的对象模型 f i g u r e2 圣o b j e c tm o d e l sm a p p e dt oe n t i waa n db 这种键映射模式如何映射实体之间的关系将在随后的关系映射中论述。 2 3 2 关系映射 实体之间关系是一组实体之间有意义的关联在关系数据库中这种关联表 现在对表之间的关系代数操作可以获取体现这种关系的元组集合。在这个集合中 一个表中的元组会和与之相关的另一个表中的相关元组相联系起来。这是实体间 关系体现的根本。从这个角度讲,在通过外键属性映射了实体之间的关系后,由 于外键属性的类型是与之相关的实体所映射的对象类型,因此,实体之间的关系 就演变成了对象模型中对象之间的关联关系,并且通过这种关联关系,每一个对 象实例( 对应实体的每一个元组) 将与这个对象相关联的另一个或者多个对象的 实例相关。这就是e o r m 的关系映射的基本原理。以下针对实体之间不同的关 系分别进行具体讨论。 2 3 2 1 一对一关系 在关系模型中,两个实体之间的一对一关系通过在任何一个实体中加入与之 关联的另一个实体的主键作为外键来体现。当实体模型映射为对象模型后,则根 据e o r m 的键映射模式,两个相关联对象的其中一个将保持与之相关联的另一 个对象的类型引用。这个引用在对象模型中就映射了两者之间的一对一关系。 例如,丈夫和和妻子实体之间是一对一关系。对于这两个实体之间的一对一 1 2 第2 章技术组成及架构 关系可以在丈夫实体或妻子实体之一中保持对另一个实体的外键来体现。例如图 2 - 3 中在丈夫一端保存妻子的主键d 作为外键w i f e l d 。 h u s b a n d w i f e 国一铟 图2 - 3 丈夫与妻子之间的一对一关系 f i g u r e2 - 3o n et oo n er e l a t i o nb e t w e e ne n t i t yw i f ea n dh u s b a n d 则这两个实体映射到对象模型后,丈夫和妻子对象之间将产生关联关系。每 个丈夫实例将保存其妻子实例的引用。如图2 - 4 。 图2 - 4 丈夫和妻子实体所映射的对象模型 f i g u r e2 - 4o b j e c tm o d e l sm a p p e d t oe n t i t yh u s b a n da n dw i f e 在丈夫对象中,具有映射丈夫实体的外键w i f e i d 的外键属性w i f e ,其类型 是w i f e 类型。也就是说对于每一个丈夫实例,它的一个属性都保持了与之相关 的妻子的实例引用,从而在对象模型中映射了这种一对一的关系。 2 3 2 2 一对多关系 在关系模型中,两个实体之间的一对多关系通过在“关系为多”的实体一方 中加入与之关联的“关系为”的实体一方的主键作为外键来体现。当关系模型 映射为对象模型后,则根据e o r m 的键映射模式,必定在关系为多的对象中保 持一个与之相关联的关系为的对象的引用。这个引用在对象模型中就映射了两 者之间的一对多关系。 例如一个经理管理多个员工,则经理实体和员工实体之间是一对多关系。对 于这种一对多关系需要在关系为多的一方,即员工一方增加对关系为一的一方, 北京工业大学工学硕士学位论文 即经理一方的主键作为外键来体现。如图2 5 。 图2 - 5 经理与员工之间的一对多关系 f i g u r e2 - 5o n e t om a n yr e l a t i o nb e t w e e ne n t i t ym a n a g e ra n ds t u f f s 则这两个实体映射到对象模型后,经理和员工对象之间将产生关联关系。每 个员工实例将保存其经理实例的引用。如图2 - 6 。 图2 - 6 经理和员工实体所映射的对象模型 f i g u r e2 - 6o b j e c tm o d e l sm a p p e dt oe n t i t ym a n a g e ra n ds t u f f 在员工对象中,具有映射经理实体的外键m a n a g e r f f ) 的外键属性m a n a g e r , 其类型是m a n a g e r 类型。也就是说对于每一个员工实例,它的一个属性都保持了 与之相关的经理实例的引用,从而在对象模型中映射了这种一对多的关系。 2 3 2 3 多对多关系 在关系模型中,两个实体之间的多对多关系通过增加分别与两个实体相关联 的关联表体现。当关系模型映射为对象模型后,e o r m 通过将关联表也映射为 对象来实现多对多关系映射。可以称这种对象为关联对象,其中保持了与两个实 体所映射的对象的引用,而这个关联对象就映射了两个实体所映射的对象( 可以 称之为实体对象) 之间的多对多关系。 例如订货这个过程就需要多对多的关系表达。一个客户可以定购多种产品, 同时,一种产品可以已经被多个客户定赂。则客户实体和产品实体之间是多对多 1 4 第2 章技术组成及架构 关系。对于这种多对多关系需要建立另外的关联实体订单,订单中需要增加 客户以及产品的主键作为外键来体现这种多对多关系。如图2 - 7 。 c l i e n t0 r d e rp r o d u c t 图2 7 以订单维护的客户与产品之间的多对多关系 f i g u r e2 - 7m a n yt om a n yr e l a t i o nb e t w e e ne n t i t yc l i e n ta n dp r o d u c tm a i n t a i n e db yo r d e r 在这个多对多关系映射到对象模型时,不仅实体客户及产品将映射为实体对 象,而且依据e o r m 提出的映射模式,关联表订单也将映射为订单对象。每个 订单对象实例中将同时保存对客户及产品的对象实例的引用。如图2 8 。 图2 - 8 客户、产品以及订单实体所映射的对象模型 f i g u r e2 - 8o b j e c tm o d e l sm a p p e dt oe n t i t yc l i e n t ,p r o d u c ta n do r d e r 在订单对象中,具有映射客户实体的外键c l i e n t l d 的外键属性c l i e n t ,其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47054-2026森林草原防火无人机巡查技术规范
- 首都师范大学《同传实践》2024-2025学年第二学期期末试卷
- 耕整地机械操作工诚信品质测试考核试卷含答案
- 稀土发光材料工班组安全水平考核试卷含答案
- 水产品原料处理工操作规程竞赛考核试卷含答案
- 汽车租赁业务员安全意识强化评优考核试卷含答案
- 二甲基甲酰胺装置操作工复测竞赛考核试卷含答案
- 煮糖助晶工创新实践竞赛考核试卷含答案
- 电火花线切割机床操作工班组安全竞赛考核试卷含答案
- 聚氯乙烯塑料配制工操作评估水平考核试卷含答案
- DBJT 13-505-2025 福建省既有钢结构检测与鉴定技术标准
- 机械应力与肾微环境变化-洞察与解读
- 2025年通辽单招题库及答案护理
- 2025至2030中国真空(泵和阀门)行业项目调研及市场前景预测评估报告
- 机场值机考试试题及答案
- 物流保供异常管理办法
- 2025年高等教育工学类自考-02141计算机网络技术历年参考题库含答案解析(5套典型考题)
- 家校沟通策略与实施方法
- 物业工程主管岗位面试问题及答案
- 军人俱乐部管理办法
- 【课件】数列探究课+斐波那契数列与黄金分割比+课件-2024-2025学年高二上学期数学人教A版(2019)选择性必修第二册
评论
0/150
提交评论