(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf_第1页
(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf_第2页
(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf_第3页
(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf_第4页
(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf_第5页
已阅读5页,还剩71页未读 继续免费阅读

(计算机应用技术专业论文)j2ee中对象关系映射相关技术的应用研究.pdf.pdf 免费下载

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

文档简介

j 2 e e 中对象关系映射相关技术的应用研究 j 2 e e 中对象关系映射相关技术的应用研究 i 两要 本文研究j a v a 中对象模型到关系模型的映射问题,其目的就是在 j a v a 开发环境中建立一个持久层,将对象模型到关系模型的映射信息在 程序代码之外进行集中封装。通过这样种方式,可以达到以下目的: 一,分离数据访问逻辑与业务逻辑;二,降低重复代码的编写,使得开 发者能够集中精力于业务领域;三,提高应用程序的可维护性和可扩展 性。 本文首先介绍了j a v a 领域中的各种对象持久化技术及其优缺点; 接着对对象模型到关系模型映射的基本策略进行了阐述,并分析了纯 o r m 所存在的几个主要问题;然后针对纯o r m 的不足之处,提出了 轻量级o r m 的总体设计,并简要的阐述了该系统的各个功能模块的作 用;接着给出了各模块中的关键部件的详细设计与实现,主要包括:映 射生成器,持久管理器,对象存取器,映射信息库,缓存的组织,以及 系统中所存在的核心逻辑和关于性能优化的策略;接下来给出了如何在 j 2 e e 中使用该系统的一个示例,并分别就功能和性能两方面对系统进 行了测试;论文最后对该系统的设计与实现做了总结,并提出今后需要 进一步研究的内容。 关键字:对象关系映射,对象模型,关系模型,持久层,持久化 作者:余俊新 指导教师:孙涌 ! 生! 翌! t _ 垒! ! ! 苎! ! ! ! 嬖! 竺! ! ! ! ! ! ! ! ! 生! ! ! 虫! ! ! ! g :! ! 旦堕! ! ! ! ! ! ! ! ! ! 坚翌! ! g ! ! j 2 e e a p p l i c a t i o nr e s e a r c ho nr e l a t i v et e c h n o l o g yo f o b j e c t r e l a t i o nm a p p i n gi nj 2 e e a b s t r a c t t h i sp a p e rr e s e a r c h e so nt h e m a p p i n gb e t w e e no b j e c tm o d e la n d r e l a t i o nm o d e l ,i t sp u r p o s ei st oe s t a b l i s hap e r s i s t e n c el a y e ri nj a v ad e v e l o p e n v i r o n m e n t ,a n de n c a p s u l a t i n gm a p p i n gi n f o r m a t i o no fo b j e c tm o d e la n d r e l a t i o nm o d e lo u to ft h ec o d e v i at h i sm o d e ,i tc a no b t a i nt h ef o l l o w i n g a d v a n t a g e s :f i r s t ,s e p a r a t e sd a t aa c c e s sl o g i cf r o mb u s i n e s sl o g i c ;s e c o n d , r e d u c e sr e p e a t e dc o d e ,s ot h ed e v e l o p e rc a nc o n c e n t r a t eo nt h ep r o b l e m so f b u s i n e s sd o m a i n ;t h i r d ,e n h a n c e st h em a i n t a i n a b i l i t ya n de x t e n s i b i l i t yo f a p p l i c a t i o n t h i sp a p e ri n t r o d u c e st h ed i f f e r e n tt e c h n i q u e so fo b j e c tp e r s i s t e n c e , a n dt h e i r a d v a n t a g e a n d d i s a d v a n t a g e s i nj a v a e n v i r o n m e n t ;t h e n d e m o n s t r a t e st h eb a s i cs t r a t e g yo f m a p p i n go b j e c tm o d e lt or e l a t i o nm o d e l , a n da n a l y z e st h em a i np r o b l e m so f p u r eo r m ;a i m i n gt ot h ed e f i c i e n c yo f p u r eo r m ,i tp r o p o s e sa no v e r a l ld e s i g no fal i g h t - l e v e lo r m ,a n de x p l a i n s t h ef u n c t i o no f e a c hm o d u l eb r i e f l y ;a n dt h e np o s e st h ed e t a i l e dd e s i g na n d i m p l e m e n t a t i o no fc r i t i c a lc o m p o n e n to fe a c hm o d u l e ,m a i n l yi n c l u d e s : m a p p m gg e n e r a t o r ,p e r s i s t e n c em a n a g e r ,o b j e c to p e r a t o r ,b a s eo fm a p p i n g i n f o r m a t i o n ,o r g a n i z a t i o no fc a c h e ,t h ec o r el o g i co ft h es y s t e m ,a n dt h e s t r a t e g yo fp e r f o r m a n c eo p t i m i z a t i o n ;t h e ng i v e sa ne x a m p l eo fh o wt ou s e t h i ss y s t e mi nj 2 e e ,a n dt e s t st h es y s t e ma c c o r d i n gt oi t sf u n c t i o na n d p e r f o r m a n c e ;a tt h el a s t o ft h i s p a p e r ,i ts u m m a r i z e st h ed e s i g na n d i m p l e m e n t a t i o no ft h i ss y s t e m ,a n dp o i n t so u ts o m ep a r t sw h i c hn e e dt ob e r e s e a r c hm o r ei nt h ef u t u r e k e y w o r d :o b j e c t r e l a t i o nm a p p i n g ,o b j e c tm o d e l ,r e l a t i o nm o d e l , p e r s i s t e n c el a y e r , p e r s i s t e n c e w r i t t e nb yy uj u n x i n s u p e r v i s e db ys u ny o n g 苏州大学学位论文独创性声明及使用授权声明 学位论文独创性声明 本人郑重声明:所提交的学位论文是本人在导师的指导下,独立进行研究工 作所取得的成果。除文中已经注明引用的内容外,本论文不含其他个人或集 体已经发表或撰写过的研究成果,也不含为获得苏州大学或其它教育机构的 学位证书而使用过的材料。对本文的研究作出重要贡献的个人和集体,均己 在文中以明确方式标明。本人承担本声明的法律责任。 研究生签名:日期:竺! ! :竺:! 学位论文使用授权声明 苏州大学、中国科学技术信息研究所、国家图书馆、清华大学论文合作部、 中国社科院文献信息情报中心有权保留本人所送交学位论文的复印件和电 子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内 容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅 和借阅,可以公布( 包括刊登) 论文的全部或部分内容。论文的公布( 包括 研究生签名龛! 煞堑日 导师签名:毛淞日 期;竺:! :三:p 期:业堕0 j 2 e e 串对象关系映射相关技术静应用研究第一章靖论 1 1 课题背景 第一章绪论 在软件开发中,面向对象开发技术是继过程化编程之后的个重要 里稷碑。对象模鍪能够受好的撼述现实世界,它克服了过程纯编程技术 中的很多不足。假是,猩面向对象技术中,对象的生命周期仅限于应用 程序运行期间,程序结荣,对象就被销毁,它们的生命周期具有暂时性 的特点。为了将这些对象的状态永久的保存起来,就必须将它们以一定 的格式存储到磁盘等持久性存储介质中,对象的这种需求称之为持久性 “1 ,具有持久性震求的对象通常称之为持久对象乜1 ,蕊将对象存储到持久 性存储介质或从持久存储介质读取对象的过程则称为对象持久化瞄1 。 对予嚣怠对象模型懿数据存德方式,最悫接的疲该是使鼹西囊对象 数据库( o o d b ) 。然而网前市场上关系数据库占据着主导地位,大量的 应麓系统袋灞关系数据簿佟为底层的数据存锫和管理系统。蔫瑟离对象 方法分析和设计应用、用关系数据库存储数据,自然就涉及到面向对象 模型与关系模型相互转换的阀题,即消除“阻抗不匹配”( i m p e d a n c e m i s m a t c h ) 所带来的困难。 “阻j 宄不匹配”是对象模型和关系模型的主要矛盾h 1 。对象模型基于 糕会、继承、封装、多态等理论,藤关系模型基于数学原理,不同的理 论基础导致了不同的优缺点。1 。对象模型侧重于数据和行为的封装来构造 应怒程痔,面关系模型主要是针对数据的存储。在对象模型孛,常常是 通过对象之间的关系来进行访问,而关系模型中,则是通过表的连接、 行列的复涮来完成数据麓存取。这种基本鼹不霜使两种枫稍熬结合著不 理想删。 在应阁上使用对象模型、猩数据存储上使甭关系模型,不可避免的 要面临对象在关系数据摩中的存取,丽由于这两种模型的内在机制不同, 使樗在存取过程中会遇委i 。t 艮多豳难,为了消除这种困难,就必须在对象 第一章绪论 j 2 e e 中对象关系耿射相关技术的应用研究 模型与关系模型之间进行必要的转换。 1 2 研究现状 如果使用关系数据库来存储对象,那么就必须在对象与关系数据库 之间进行必要的转换。从数据库角度来考虑,可以在关系数据库的s q l 语言中增加复合类型、递归结构和面向对象特征订,这种扩充了面向对象 特征的关系数据库,称为对象关系数据库,如o r a c l e 数据库。对于已 经投入大量经费建设关系数据库的公司来说,它们不会采用这一种方法, 而通常在程序设计语言层面上来解决这一问题。 在j a v a 环境中,人们对于对象模型到关系模型的转换做了大量的研 究,也提出了很多解决方案,这些解决方案主要有如下几种: 1 2 1 实体b e a n e j b 是j 2 e e 的核心技术之一,它的主要目标是为分布式面向对象的 应用系统提供标准的组件体系结构,e j b 运行在e j b 容器中,而e j b 容 器运行在一个应用服务器中。e j b 开发者和e j b 容器之间的工作划分使 得开发者将精力集中在业务逻辑中,而不是系统编程阳3 。 实体b e a n 是e j b 的一种,它是j 2 e e 平台中用来存储和访问持久 数据的技术。实体b e a n 分为c m p ( 容器管理的持久性) 和b m p ( b e a n 管理的持久性) 。使用b m p 时,开发人员需要编写j d b c 持久性代码而 容器负责确定何时调用这些代码。使用c m p 时,开发人员使用x m l 文 件来配置数据的持久性,容器读取配置文件自动生成持久性代码并管理 持久性逻辑。它具有如下优点: 1 ) 它是面向对象的 实体b e a n 将持久数据以对象形式在内存中进行表示,在业务逻辑 中以对象的观点进行操作,方便数据的管理和操作。一旦获得一个实体 b e a n ,就可以以j a v a 对象的方式对其进行操作隅1 。 2 ) 技术成熟 j 2 e e 中对象关系映射相关技术的应用研究第一章绪论 e j b 是s u n 公司大力发展的技术,在业界内得到了很多公司的支持, e j b 技术包含丰富的参考文献,设计模式和最佳实践等。 3 ) 标准化 e j b 规范定义一组与实现无关的接口,e j b 容器提供商可以实现这些 接口来支持实体b e a n 。 4 ) 容器管理和服务 e j b 容器提供了很多服务,如b e a n 的生命周期服务、安全性、事 务处理、资源管理等,为开发者降低了非业务领域的开发负担。 虽然拥有上述优点,但是它的缺点也很明显,主要有下面这几点: 1 ) 有一定成本 e j b 需要运行在e j b 容器中,因此需要额外购买e j b 服务器,虽然 有免费的e j b 容器,但是在其它方面需要付出一定费用。 2 ) 使用不便 开发和部署实体b e a n 的工作量太大。每个持久对象都需要写一个:撼 h o m e 接口和一个业务接口,以及大量的部署描述符。 3 ) 实体b e a n 的性能比较差 因为组件管理和方法拦截造成了巨大的开销,尤其是在处理大结果 集时更加明显。 4 ) 无法把带有继承结构的对象映射到关系数据库中阳1 。 5 ) 对数据库功能的支持不够好,如不能调用存储过程等。 j d o 最早是由s u n 公司召集众多o r m a p p i n g 团队集中起来共同提 出,它主要是为了解决实体b e a n 在数据库访问中存在的问题而出现的。 它关注的是通用的对象持久化,定义了一组访问持久对象的a p i ,但是与 一般o r m a p p i n g 不同的是,j d o 定位于不只是面向关系数据库的存储, 而是针对所有存储技术。 它的优点有下面几点: 第一章绪论 j 2 e e 中对象美系映射穗燕技术盼融蘼醑究 1 ) 它是面向对象的 m o 提供了面向对象的数据库访问机制,使用j d o 可以充分的利用 j a v a 中的面向对象特性,包括使用继承农多态,丽这些在j d b c 或e j b 中是不可能的。: 2 ) 可移植性好 j d o 使用了一种类似j d b c 的可插入的高级体系结构,在这一体系 结构中,开发人员将自己戆我羁缀写戏标准接蠲集( j d oa p i ) ,谣供应 商提供这些接口的实现,这使得用j d o 编写的代码很容易移植1 。 3 ) 使焉简单 4 ) 资源使用较少 与实体b e a n 耜沈,j d o 是一个轻匿级的持久层实现,持久对象更 接近予普通的j a v a 对象。 j d o 有如下缺点: t ) 技术不成熟 j d o 技术还存在着很大争议,这些争议有技术方面的原因,也有非 技术方瑟的溅因。阂诧,该藏范一直没窍稳定下来,很少有公霉愿意在 实际业务中使用j d o 。 2 ) 有一定成本 在使用j d o 产品时需要为j d o 供应商提供一定的费用。厦然有免费 开源的j d o ,但是并没有好的实现“。 1 , 2 3 瓣象关系映射 除了上面所介绍黧的a 种技术外,在构建面向对象的应用系统时, 还可以使用对象关系映射技术。对象关系映射( o b j e c t r e l a t i o nm a p p i n g , 简称o r m ) 是指这样的一种操俸:它是在对象模型与关系模型之间,以 及支持这两釉模型的底层机制之间进行转换的一种操作【l 引。对象关系映 射产品专门负责对象到关系数据库的持久化,实际上就是一个位于对象 模型移关系数据疼之阗的一个持久层【4 】。这方瑟免费鲶产品有h i b e r n a t e , j 2 e e 中对象关系映射相关技术的应用研究 第一章绪论 a p a c h eo j b 等,商业的如o r a c l e 公司的t o p l i n k 等。这种技术的特征就 是利用封装原理,将映射过程隐藏,使得数据访问逻辑独立于业务逻辑, 提高软件的可复用性和可维护性。 自从2 0 世纪9 0 年代对象关系映射的概念出现之后,十年来该技术 在广度和深度上不断发展、成熟,但是始终缺少一种在成熟性、性能、 可移植性、简单性、资源耗用性等方面比较好的映射技术,所以在实际 应用中还存在着很多问题。目前这种解决方案大多提供的是一种纯对象 关系映射“”,它能解决许多问题,但是在很多情况下需要使用一种轻量 级对象关系映射“”。在本文中,所要研究的即为后一种。这里,我们将 它们统称为对象关系映射。 对象关系映射工具具有如下优点“盯“: 1 ) 它是面向对象的 这类工具一般都提供了强大且可配置的对象关系映射能力。它采用 面向对象的封装,使得数据库底层细节不会过多的暴露给开发人员,开 发人员可以集中精力解决业务逻辑问题,而不必关心从数据库中获取什 么数据,如何将这些数据存储到数据库等底层操作。 2 ) 应用程序结构清楚,易于维护 它将数据访问逻辑从业务逻辑中分离出来,当数据库结构发生变化 时,如数据库表名变化,或者列名变化等等,只需在配置文件中进行相 应的更改,而无需改动应用程序代码。 3 ) 应用程序具有更好的可扩展性 、 由于对象关系映射工具从传统的业务逻辑层中分离出数据访问逻辑 层,使得当用户需求发生变化时,仅仅需要对相应的层进行调整,以最 小的代价来适应用户的需求变化。 4 ) 无需容器即可运行,消耗资源少 这类工具有一个最大的缺点,就是没有统一的标准,每一个对象关 系映射工具都有一套自己的a p i 。但是,目前在持久层领域并没有比较好 的应用广泛的标准。 第一章绻沧 j 2 e e 中对象必系映射稠筵襞米静斑蒡l 研究 1 3 课题内客和重点 本文对对象模型到关系模型的核心转换机制进行研究,在此基础上 实现一种轻羹级对象关系映射,其目的就是将对象模型到关系模型的映 射信息进行集中封装,分离数据访淘逻辑与业务逻辑,使缮应用稳痔具 有更优良的逻辑结构以及可扩展性和可维护性,同时可以降低重复代码 愆缠写,搜褥开发者麓够集孛精力于监务领域,并显与缝o r m 相魄楚够 有更好的性能以及使用上的灵活性。 凳了达至l 这个罄懿,本文在j a v a 繇辘中磷究并实现了基于元数据的 轻量级对象关系映射,它从三方面来支持对象模型到关系模型的转换: 一,欧射对象属性刘表字段;二,映射类翻表;三,映射对象之间的关 系到表之间的键。论文主要工作内容如下: 轻量级对象关系映射的总体设计 本文在研究系统需求的基础上,抽聚出与该系统进行交互的终部实 体,以及系统内部的组件,在分析这些构件之间内在逻辑联系的基础上, 设计出一个可扩展躲数据访遗孛阀馋。 映射信息的生成 魏侮铁欧劈季文件中取褥映射信怠荠将它钓及欧到持久管理器中,是 一个非常复杂的过程,本文采用一个专门的映射生成器来读取映射信息, 并盈按照一定步骤来构造持久管理器。 映射模块的设计 映射模块是系统的一个重要组成部分,它包含逻辑模型与物理模型 蹑部分,前者是一季孛动态模型,它负责映射的行为;爱者是一种静态摸 型,它负责描述映射信息。这两种模型由映射生成器负责协调。 缓存系统豹设诗 提供了一个可接插、可定制的缓存系统,用户可以根据应用的需要 安装不弱萋换策略鼹缓存,露辩必蔫户掇供了对缓存各种特性迸李予控制 的手段,如刷新缓存、缓存大小、是否肩用缓襻等。 系统查询及筵新接翻与j d b c 接豳的转换 j 2 e e 中对象关系映射相关技术的应用研究第一章绪论 负责将系统所提供的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 ) 接口 转换成j d b c 接口,同时将j d b c 查询结果集转换成对象。 性能优化策略 性能方面的优化也是系统在设计过程中的一个重点,本文通过一系 列策略,有效的提升了系统的性能。 1 4 论文组织结构 本文后续章节的组织结构如下: 第二章对象关系映射概述:介绍了对象关系映射在实际应用中的意 义,分析了对象关系映射所面临的问题,以及实现的基本原理,并阐述 了两种不同实现方式的特点。 第三章系统总体设计:分析并给出了系统的基本需求,以及设计目 标和思路,接着给出了该系统的总体框架,大体介绍了系统的各个组成。 模块的功能。 ” 第四章详细设计与实现:针对第三章介绍的各个模块,详细介绍了 各模块的具体实现,实现当中所采用的一些算法,以及系统的核心逻辑, 最后介绍了为提高系统性能而采用的一些策略。 第五章系统应用及测试:结合一个应用示例来介绍如何使用该系 统,接着对系统的基本功能进行了测试,并结合其它两种数据访问技术 通过实验在性能上进行对比,进一步验证了该系统的有效性和可复用性。 第六章总结与展望:对本文所研究的内容进行总结,并展望下一步 工作。 第二章辩象关系歇瓣糨述 j 2 e e 串对象凝系酸射稽芙技术豹蔽翔研究 第二章对象关系映射概述 巍予关系数据麾以表为基本镑理擎元,黪以在镬耀关系数据瘁鹃覆 向对象软件系统中,对象模型最终是由装和表之间的关系来描述的,也 就是诞对象模型蠢关系模登的睽舅雪就是类蠢数据库表的交换过程。本章 主要对这一变换的基本原理进行阐述和分析。 2 1 对象关系映射的意义 对象关系映射层是位于用户的业务逻辑层和关系数据库之间的一个 持久层潮,持久层是负责池务逻辑类与关系数据库之阀进行通信豹一组 类,它解决了对象模型和关系模型的不匹配,使得业务逻辑层与关系数 据库典有无关性。 a p p l i c a t i o nl o g i c d o m a i no b j c c t s ( ,r ma b , , ;t r a c t i o n o r ml 越冉l e 撼e l l a l i o n j 1 ) h c p h y s i c a ld a t a b a s e 翻2 - i 对氰关系欧射层 参考图2 1 ,在传统的患接使用j d b c 操作数据库的情况下,应用程 序逻辑结构如左图;如果采用持久层方式来访问数据库,应用程序的逻 辑结构如右圈。从中可以番出,持久层实际上是位于业务逻辑与j d b c 之间的个数据库访问中间件,它向开发人员屏蔽了底层数据访问细节, 同时麓够失震户提供多释持久层鼹务。 与传统的直接操作数据库的方式相比较,采用持久层访问数据麾具 有螽下优势: j 2 e e 中对象关系映射相关技术的应用研究第二章对象关系映射概述 1 ) 对底层数据库进行封装,使得数据库底层细节不必暴露给开发人 员,开发人员可以专注于业务领域的问题; 2 ) 应用程序结构清楚,易于维护“。它将数据访问逻辑从业务逻辑 中分离出来,当数据库结构发生变化时,如数据库表名变化,或者列名 变化等等,只需在配置文件中进行相应的更改,而无需改动应用程序代 码。 3 ) 应用程序具有更好的可扩展性。持久层从传统的业务逻辑层中分 离出数据访问逻辑层,使得当用户需求发生变化时,仅仅需要对相应的 层进行调整,以最小的代价来适应用户的需求变化。 4 ) 能够有效的降低重复代码的编写,使得开发人员从繁琐的j d b c 当中解脱出来,提高了软件开发效率。 2 2 对象模型与关系模型的不匹配 通过图2 2 可以看出,对象模型与关系模型似乎有一些很自然的对应一 关系。对象是由类来实例化的,在对象内部包含着属性;类似的,数据 库表则是由模式来定义,该模式定义了表列。一个类的实例( 对象) 包 含着数据,而一个元组同样包含着数据。简单说来,也就是类对应着表, 而对象对应着元组,对象的属性对应着表列“”。 图2 - 2 对象模型与关系模型的简单映射 第二牵对象关系狡射糍逮1 2 e e 孛对象关系浃射楣关技术抟瓣用研究 但是实际上却不是上颥描述的这么简单。对象模型基于软件工程的 一些原理,例如藕合、继承、多态、封装等,而关系模型贝f j 基于数学原 理,特别是集合论的原理。对象模型侧霆于从包含数据帮符炎麴对象孛 构建成用程序,而关系模型则主要是用来存储数据。当在使用面向对象 开发懿应用系统中访闻关系数据簿对,“阻抗不匹配”裁成了主要矛露: 在对象模型中,是通过对象之间的关系来访问对象,而在关系模型中, 剡通过复裁数据寒联接表中的行。这穗基本戆差异导致两静模型静结合 并不理想,对象模型与关系模型的不匹配具体表现在如下方顾: 2 2 1 对象的属性 对象是裔状态的实体,当使用关系数据库来保存对象的状态时,通 常会将对象懿状态,帮对象酶藩槛僮存储予所对应的数据疼表孛。 面向对象模型中的对象的简单属性与关系数据库表的列之间可以简 单的置换,麴j a v a 韵s t r i n g 类型可以映射成o r a c l e 中的v a r c h a r 类型 “”。但是如果对象的属性是复杂类型,阏题就会很复杂。因为面向对象 模型中可以方便的构造各种新数据类型,而关系数据库的数据类型简单 固定,它只鸯敬存储处理蕊单的数擐类型,如数字、字符串、隧裳等类型, 虽然可以通过在数据库中增加一种新的数据类型来解决这方面的问题, 但是当今数攒痒管毽系统对鼹户蠢定义类型的支持并不完善,显不霜数 据库管理系统的用户自定义类型缎难相互移植“。 2 2 2 对象的继承 因为关系数据库不支持继承的概念,而在面向对象语言中使用父类 酾子类寒表达继承概念,辫数在褥对象模鍪转换裂关系模型瓣,在数据 库中表达其继承关系也是一个需要解决的问题。 j 2 e e 中对象关系映射相关技术的应用研究 第二章对象关系映射概述 2 2 3 对象间的关系 对象之间存在着复杂的关系,这些关系包括关联、聚集和组成。在 面向对象模型中可以很容易的建立对象之间的关系,但是在将对象之间 的关系在关系数据库中表达时,却要耗费大量的时间和精力,并带来了 极大的复杂性。例如,对象模型中简单的多对多关系在关系数据库中进 行表达时可能就需要复杂的外键策略。因此,在将对象持久化到数据库 中时,对于对象间关系的持久化,同样是一个需要解决的问题。 2 3 对象到关系数据库的映射机制 2 3 1 属性映射成列 类属性通常映射成数据库中的零或者多个列,但是并不是每一个类 属性都需要持久化。例如,s t u d e n t 类有一个t o t a l s c o r e 属性,该属性可锚? 各s c o r e 属性计算得到,它并不需要保存到数据库中,因此无需对它进行 映射。 将属性映射成列时,最常见的情况是将一个类属性映射到数据库表 中的一个列乜1 。当类属性和表列的类型都是简单类型时,比如它们都是日 期类型或者字符串类型,那么直接进行一对一映射即可。但是当需要映 射的类属性的类型不是简单类型或者是关系数据库所不支持的类型时, 就不能通过这种映射方式来进行。例如,关系数据库一般不支持j a v a 中 的b o o l e a n 类型,这时就需要将它映射成数据库中的字符类型或者数值类 型。另外,如果数据库字段的粒度比对象的属性更细,通常就需要将对 象的属性映射到多个表字段“”,比如c o u r s e 类有一个t e a c h e r 类对象作为 属性,这个时候t e a c h e r 就需要映射成为数据库中的几列。在有的情况下 也需要将多个属性映射成表中的单一列。例如,代表美国邮政区号的类 可以有三个数字属性,每一个都代表邮政编码中的某一部分,而邮政编 码可以在数据库中以单一的列来进行存储。 第二章对鬟关系获射概述 j 2 e e 孛辩鬟装系映射糖燕技术的藏用研究 2 3 2 属性类型映射成域 关系数据库的数据类型有限,远少于高级语言的数据类型,难以表 现高级语言中丰富的数据类型和臼定义类型,给数据接口程序的编写带 来银大懿底联。必勰决这一矛蓐,在实现对象关系映射辩,霪要袭对象 模型中的类型与关系模型中的类型之间进行转换。 2 3 3 映射继承到关系数据库 襁关系数据库中实现继承的策略取决于类到表的映射策略。类到表 的映射透掌不是直接的,除了毒常篙单的应嗣外,逶常不会有类至袭戆 一对一映射。将类之间的继承关系映射到关系数据库中有三种基本策略 ,下露将详细讨论这三静映射策略。 整个类层次一张表 该策略把一个完整类层次继承结构映射成一个数据库表,而层次结 构中的所有类的所有属性都存储在这张表中舱“。采用这种策略的优点是, 性能好,可以很容翁的实现;在数据库中提供了最佳的空间占用,没有 任何冗余属性。缺点是对象与数擐库之阀的糕会程度魄较裹,在类层次 中增加或者删除一个属性时,就必须对数据库袭做相成改动。 每个舆体黪类一张表 在这种策略中,每一个具体的类映射到一张表,并将该类的父类的 属牲翻入到露一张表孛,攒象类不需要映射妥表疆1 。萁优点是,一次数据 库操作就可以完成一个对象的读取。该策略的缺点是类与数据库的耦合 程度眈较高,增加鳞删除父类的满性会褥致对所有子类所映射的表的结 构的修改;对多态和继承的支持不够好;数据霹中的冗余字段比较多。 每个类一张袭 在这静映射方式中,不管是舆体类逐是抽象类,每个类都将映隽重到 一张表陋3 。采用这种策略,必须在存放父类实例的表和存放子类实例的表 之闻建立具有唯一性的外键约束关系,在每个袭中插入一个谈裂l d 游子 1 2 e e 中对象关累酶射相盏技术的应用研巍第二犟对象关系映射概述 类所在表酶记录秘父类所在装的记录关联起来。这种策略瀚优点是,类 与数据痒之闻韵耦合程度院较低,类属性的交动引怒的表结构豹变动很 ,j 、;遴关系数据瘁申最大程度麴实现了对多态酶支持;空阉节约僚抒, 唯一的冗余就是增烟了额外熬识别l d 袋逡接不露的继承屡次;欧射魄较 直接,容易理髂,维护成零低。该策峨的主要缺点是j 陡能比较差,访阉 类的实铡时,嚣贾跨表关联;可能导致频繁访| 、藏父类掰对戏的表。 2 3 4 浚射关系刘关系数据瘴 数摄库巾不应该只保存持久对象,还魔该保存持久对象之阏的关系。 对象之间的关系除了继承,还有关联、聚集和组成,它们之间的区别在 于对象之间的绑定樱度碍,。 对象间的关系可以分为对关系、一对多关系、多对多关系,对 予不麓类型懿关系,漾爰黪浃射策略不麓。要实现一对一藕一对多关系, 只需娶将一张表的键包含寝勇一张表中强为。要实现多对多的关系,需要” 关联表的壤念,它楚静数据实体,啭一麴翼标就是在关系数据库中维 护联个或者多个表熟关联璐1 。 一对关系 这种关系可以避过外键方式实现,在任意个类辫对废的表中舶入 另一方所对应的表的主键作为外键。 一对多关系 同样是通过外键方式来实现,在“多”的一方所对威的表中加入“一” 豹一方掰对应魏表瓣主键侔为外键。 多对多关系 程多黠多关系麴映射孛,霈簧额外剖建一张关联表,在关联表串存 放嚣个关联麴表鲍主键作必翳性,恧关联表静主键一般是逮溪个表熬主 键的缀合。 第二章j l 雩象关系暧甜概述 j 2 e e 串对象关系映射稳荚技术静斑爝研究 2 。4 纯o r m 与轻量级o r m 具体的对象关系映射实现司以在不网程度上支持对象模型到关系模 型的转换,根据所支持程度的不阔,以及使用方式上的差别,主要可以 分为较量级o r m 纛缝o r m h ”。缝关系访| 、曩数据库,或者使露瑟嗣对象 数据席则是两个极端。下面主要分析轻量级o r m 和纯o r m 的不同之处。 2 4 1 纯0 r m 实现的特点 目前,大多数对象关系映射的实现都是纯o r m ,如h i b e r n a t e 、a p a c h e o j b 等,它憾憋一个共固黪点就是对数攥疼结椽提供了较隽完整熬瓣装, 提供了从p o j o 。卯( p l a i na n do l dj a v ao b j e c t ,实际上为j a v a b e a n ) 到数据 库表黪全套皎隽孛辊制。开发人员只需定义好铁p o j o 臻数据库表熬映射 关系,即可通过h i b e r n a t e 或o j b 提供的方法来自动生成s q l 并调用 j d b c 来翔醵执行。 纯o r m 除了支持基本的对象关系映射机制外,通常还会提供很多复 杂的附加功能,如脏数据检测,对象的状态管理,延迟加载,复杂的事 务管理,多级别的缓存系统等,通常这类工具还会提供一个图形界露来 代替手工处理映射元数据。 2 4 2 轻量级o i u 实现的特点 纯对象关系映射实现了p o j o 到数据库表之间的映射,以及s q l 的 皂动生成和执行。两轻量级对象关系映射,则不会对数据瘴进行全蘧鲍 封装,它支持对象关系映射的基本特性,同时为开发人员提供了一些有 效戆访趣底层数据存储杭铡的手段。 通过定义p o j o 到s q l 之间的映射关系来实现对象到关系模型的转 换,燕| j 是一种轻量缀对象关系映射。在这种实现辊箴中,不会力程痔员 在运行期间自动生成s q l ,具体的s q l 需要由程序员来编写,然后遇过 映射配置文件,将s q l 所需簧的参数,以及返回的结果字段映射至up o j o 。 j 2 e e 母j c 孛藩关系竣射搦燕羧拳熬瘟震搿究第二辩对簸装系驶瓣概遴 这静撬裁在糅辫对象关系漱射基零耩彀瓣霜露,为薅发大英凌数摇访窝 上帮浓了雯太酶灵活性。 2 4 。3 饶缺点对她 糕对予缝对象关系皎鸯孛,上面所介缕的轻量缀黠象关系映射具有如 下优点: 1 ) 不会影嗡戮d b a 对数据库的维护工终。在系统数撬楚建量大, 对性能要求比较苛刻情况下,必须编霹简度优化的s q l 语句或存储过穰 才能达到系统的性宫毫要求,两纯对象关系映射的s q l 语句是自动生成的, 遥鬻情漉下会丧失部分数据库优纯特憔,不幂| l 于d b a 对s q l 语句逶行 优化和调试。 2 ) 穰适合予对象模整砖数据模型不稳莲酝豹系统,骧及遣留系统, 第三方数据库,秘对现煮数攥痒翁复耀。缝o r m 燕对象器动鲍,要求对 系统 数良好翡露淘霹象分槲翻设计,弱对数据模型的设诗蔼瑟能够方馕“ 的默射到对象模型,否则在使用过程中会遇到很大困难。嚣轻壁级o r m 既遥合予对象驱动,遣遮会予鼗獾驱渤,霞爻它不霈要逶过建立严格熬 映射关系来生成s q l ,所以在这种情况下不会遇到什么阻力。 3 ) 保黧了s q l 语句的全部能力。 4 ) 可 冀很轻松的将领域对象浃鸯孛缁多张表,霹戮使震饪僻粒度斡浚 射。 5 ) 可戳使爝基于数据豢豹蔓新鞠渊除高效豹簸瑾多行数罐; 穗对予纯对象关系映射,轻萋缀对象关系映射有懿f 缺点: 1 ) 比较两誊,细大了辫发王俸量 程缝对象关系映射孛,系统枣动完成了缀多本该巍嚣发人员做熬工 箨,镄灸编写s q l 语旬。褥在上蘑掰贪缀囊的轻爨级建象美舔映射中, s q l 需要手工编写。 2 ) 可移植性要差 鞭为轻奄缀对象关系映射并未对数据库梳割遴行全面瓣装,矫骧在 第二章瓣象关系姨瓣概述 j 2 e e 中对鬟关系映射辅荚技术钓藏用研究 使用辍量级对象关系映射产品的时候,开发人员可以使用数据库的私有 特性,因此对可移植性产生了不好的影响。 应该注意到,并不存在羞纯o r m 与轻量级o r m 哪一个更好的阕题, 它们都有着各自不同的适用场合。对于新系统的开发,封闭化的设计能 够带寒更好鳇开发效率和更好的封装枫铡,瞧是在墓些情况下,颦又秀 一些必须的底层调整带来了阻力,如在对遗留系统的改造和对现有数据 痒的复用上,表现濑灵活髓不是的弱点。在这种请况下,轻量缀对象 关系映射的表现更好。 2 5 本章小结 对象模型到关系模型的不匹配是对象关系映射所要解决的主要问 题。本章首先介绍了对象关系欧瓣在实际应用中豹意义,然后分掰了对 象模型与关系模型不匹配问题,接着介绍了为解决这魑不匹配的方丽所 采取的映射视利,最后对两种不同的实现方式进行了分析和对比。 j 2 e e 串对象关系映射相关技术静应用研究 第三章系统总体设计 本章在上一牵赝分缨的对象关系映射撬镶酶基磷上,根据持久层程 具体应用中的特性,抽象出系统需求,并分解出系统的各个主要构成部 分以及各部分之阀的旃佟关系。在诧基础上,提出了系统麓总体设讦。 3 1 系统鬻求 本系统对对象持久纯酶毒亍为送行辩装,它负责扶持久性存锗介质中 读取,写入或者删除对象。系统的设计应该满足如下需求: 1 ) 分离韭务逻辑与数据访阍逻辑 能够将数据访问逻辑从代码中分离出来,这样即使数据库结构发生 变化,如表名或者列名发生变化等,则只需要在映射文件中进行相应的 改动,面不需要黧毅编写代码; 一 2 ) 对持久机制进行必要的封装 在应鼷程序孛,只嚣要对系统发送u p d a t e 或者q u e r y ,裁可数实瑗黠 象的存取。而对于其它的工作,如对事务的处理,获取、释放数据库连 接及其它资源等,舞| l 壹系统来篱理。 3 ) 基于条件的多对象操作 因灸在实际廉瘸中,一次查询不仅仅只返回一个对象,经常会返隧 多个对象,所以必须能够处理根据一定查询条件同时返回多个对象的情 况; 4 ) 基予关联的多对象操l 乍 在关系数据摩中,可以进行关联的获取、保存和删除,这些操作也 可以映射裂对象的关联获取、傺存和删除。 5 ) 事务 一个事务痤该由更耪或者凌谗懿任意缝合丽戒。事务可瑷以一魏最 简单的方式实现,如要么全部做要么全部不做的方式,操作必须全部成 功或者全部取消;也可黻瑷一种更复杂的方式实现,如具有嵌套特性魏 第三章系统总体设计 j 2 e e 中对象关系映射相关技术的应用研究 事务;事务可以是非常短暂的,也可以是长期的: 6 ) 支持游标 如果一次性读取多个对象,那么可能导致在网络上一次传输几百或 者更多的对象,而通过游标,就可以一次只获取结果集中的一小部分, 然后根据需要在结果集中向前或者向后遍历,这就使得用户滚动对象列 表非常的容易。 7 ) 连接池 在一些比较繁忙的应用中,通常会遇到大量的对于数据库的请求操 作,如果对于客户到来的每一个数据库连接请求,都执行连接的建立和 释放工作,则会对数据库的运行造成巨大的负担。因此,使用一个数据 库连接池来进行数据库连接的管理,可以有效的带来性能的提升; 8 ) 支持存储过程 尽管存储过程难以移植,但是在特殊情况下,使用存储过程很有必 要。 9 ) 缓冲区 一个提高性能的有效方法就是将从数据库中查询到的对象缓存起 来,当以后进行相同查询的时候,首先在缓存中进行查找,如果找到的 话,则直接返回缓存中的对象;如果未找到,则从数据库中进行查询, 并将查询结果加入到缓存中。本系统应该实现一个能够缓存查询结果的 缓冲区; 1 0 ) 支持多种映射策略 因为映射类的层次结构可以有三种方式,而在实际应用中,这三种 映射方式各有优缺点,所以系统应该可以根据用户需要在这三种映射策 略中选择其中一种。 1 1 ) 运行时刻配置 应该可以修改系统运行时的某些属性,例如游标大小,系统中所允 许的事务数量,是否使用缓存等。 总之,系统应该让应用程序开发人员集中于他们的主要工作,即开 发应用程序,而不用关心他们所使用的对象是如何存储和检索的。更进 j 2 e e 中对象关系映射相关技术的应用研究 一步,系统不能为数据库带来太大的侵入性,应该让数据库管理人员能 够自如的管理他们的数据库。 3 2 设计目标 系统设计目标如下: 1 ) 将对象到关系数据库的映射信息封装到元数据文件中,将数据访 问逻辑从业务逻辑中分离出来。 这样做带来的好处是,当数据库表结构发生变化时,如表名或者列 名有所变动,应用程序的代码不会受到影响,不需要重新编译,这些变 化了的信息仅仅会在元数据文件中反映出来。这里体现了变与不变相分 离的原则,易于变化的部分不会散落在应用程序的各个角落,而是集中 于一个地方,有利于提高应用程序的可扩展性和可维护性。 2 ) 减少重复代码的编写,降低开发工作量,使得开发者将精力集中 于业务逻辑中。 在j a v a 中,访问数据库的最直接的方式就是直接使用j d b c ,但是 使用这种方式进行数据库访问,会迫使开发人员编写大量重复的与业务 逻辑无关的一些数据库基础操作代码,如管理数据库资源、处理异常等。 而采用持久层来访问数据库,则数据库访问代码非常简洁,开发人员可 以将大部分精力集中于业务编码,而完全不必关心数据库资源的获取和 释放,这些操作都由持久层自己来进行管理。 3 ) 提供以面向对象的方式来进行数据库访问的能力,应用程序与数 据库之间传递的都是对象。 4 ) 在对底层数据访问机制进行封装的同时为开发人员放开一部分访 问手段,使得系统在映射的处理上较纯o r m 更为灵活,且在数据访问上 提供更好的性能。 3 3 设计思路 本系统对j d b c 进行轻量级封装,系统所提供的接口最终会被转换 蘸三章糕统总体设 j 2 e e 中对象关系映射相关技术赫痤禺辑究 成j d b c 调用。凑于采用豹是一群轻量级对象关系映射,因越并不会为 程序员在运行期自动生成s q l 执行,具体约s q l 嚣要程序员绽写。 s q l 语句( 实际上是p r e p a r e d s t a t e m e n t 语句,或存健过程) 出程序 员在x m l 映射文件中进行编写,并且在映射文件中定义参数映射信息以 及结果集映射信息。其中参数映射信息的作用是将参数对象( p o j o ) 映 射到p r a p a r e d s t a t e m e n t 语句的参数并为它赋值;执行完p r e p a r e d s t a t e m e n t 语句艏,通过结果集映射信息将r e s u l t s e t 映射到结果对象( p o j o ) ,返 醑酶一条记录将构造一个j a v a 对象,如采返阐多条记录,燹| j 可以使用l i s t 来存德所构造麓多个对象。通过这撵一种方式可以达到幂| j 用j a v a 对象来 返圆

温馨提示

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

评论

0/150

提交评论