




已阅读5页,还剩48页未读, 继续免费阅读
(计算机应用技术专业论文)轻量级可重用数据持久层技术研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 数据持久层是一组软件服务,将应用程序与该程序所使用的数据 源分离,为整个项目提供一个统一、安全、并发的数据持久机制。持 久层位于数据源之上,提供访问这些数据源的应用程序接口,并为系 统业务逻辑层提供服务。它能够使程序员避免手工编写访问数据源的 方法,使其专注于业务逻辑的开发,并且能够在不同项目中重用,大 大简化了数据的增、删、改、查询功能的开发过程。 要实现数据持久化就必须首先实现对象关系映射( o b j c c t r e i a t i o n a lm a p p i n g 。o g l v o ,因此本文首先介绍了对象关系映射的原 理,讨论了目前对象关系映射存在的问题,并介绍了相应的映射策 略,其中特别介绍了两类特殊的映射,即继承关系的映射和关联关系 的映射,对于每种映射都给出了相应的实现方法。在解决了对象关 系映射的基础上,设计了一个数据持久层,在该持久层中实现了数据 库连接池管理,引入了回调机制和事务处理机制,实现了持久层的持 久化操作最后引入了一个具体的应用,并将本文所提出的持久层与 目前主流的持久化软件h i b o r n a t e 进行了比较,对其优缺点进行了说 明。 关键词持久层,对象持久化,映射,h i b e r n a t e a b s t r a c t t h ed a t ap e r s i s t e n c el a y e ri sas e r i e so fs o f t w a r es e r v e ,i tc a n s e p a r a t et h ea p p l i c a t i o np r o g r a ma w a yf r o md a t a s o u r c e , p r o v i d eau n i f i e d , s a f ed a t ap e r s i s t e n c em e c h a n i s m t h ep e r s i s t e n c e l a y e r i su p o nt h e d a t a s o u r c e s ,p r o v i d ea p p l i c a t i o np r o g r a m i n t e r f a c et ou s et h e s e d a t a s o u r c e s ,a n da l s o s e r v of o rb u s i n e 鼹l o 百c l a y e r i t c a l l h e l p p r o g r a m m e ra v o i dw r i t i n g m e t h o d st ov i s i tt h e d a t a s o u r c e , b u t c o n c e n t r a t eo i lb u s i n e s si o # cd e v e l o p i n g a n di tc a nb er e u s e di nd i f f e r e n t p r o j e c t s ,s i m p l i f y t h ec r u d o p e r a t i o nh e a v i l y 珏eo b j e c tr e l a t i o n a lm a p p i n gm u s tb er e a l i z e db e f o r ed a t a p e r s i s t e n c e ,8 0i nt h i sp a p e rf i r s ti n t r o d u c et h ep r i n c i p l eo fo r m , d i s c u s s e sc u r r e n tp r o b l e mo fi t , a n di n t r o d u c et h ec o r r e s p o n d i n gm a p p i n g s t l a t e g y , e s p e c i a l l yi n t r o d u c et w ok i n d so f e s p e c i a lm a p p i n g , a n dg i v et h e a c h i e v e m e n tm e t h o dt ob o t hm a p p i n g b a s e do nt h er e s o l u t i o no fo r m , w ed e s i g nad a t ap e r s i s t e n c el a y e r , a n da c h i e v et h ed a t a b a s ec o n n c c t , i o n p o o lm a n a g e m e n t ,d r a wi n t ot h ec a l l b a c km e c h a n i s ma n dt h ea f f a i r s r e s o l v em e c h a n i s m , a c h i e v et h eo r mf o rt h i sp e r s i s t e n c el a y e r a tl a s t t a k ea ne x a m p l ef o rt h i sl a y e r , a n dc o m p a r et h i sp e r s i s t e n c el a y e rw i t h h i b e r n a t e , t h e ni l l u s t r a t et h ea d v a n t a g e sa n dd i s a d v a n t a g e so f i t k e y w o r d s p e r s i s t e n c el a y e r , o r m , m a p p i n g ,h i b e r n a t e n 原创性声明 本人声明,所呈交的学位论文是本人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除了论文中特别加以标注和致谢 的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不 包含为获得中南大学或其他单位的学位或证书而使用过的材料。与我 共同工作的同志对本研究所作的贡献均已在在论文中作了明确的说 明。 作者签名:二益逸 关于学位论文使用授权说明 本人了解中南大学有关保留、使用学位论文的规定,即;学校 有权保留学位论文,允许学位论文被查阅和借阅;学校可以公布学位 论文的全部或部分内容,可以采用复印、缩印或其它手段保存学位论 文;学校可根据国家或湖南省有关部门规定送交学位论文。 作者签名:龌导师签茗苎幽日期:2 = ;z - 年上月4 日 硕士学位论文 第一章绪论 1 1 研究背景及意义 第一章绪论 面向对象的软件开发技术是当今软件开发的主流技术,在面向对象方法大行 其道的今天,数据和过程己被封装到一个个的对象当中,这样对数据的可访问和 持久性研究就上升为对对象的可访问和持久性研究。所谓对象的持久性也就是指 对象的生命周期在被创建和使用后能够通过持久机制而延续可以在下一次系统 启动时继续使用。这样它的生命周期也就是持久的生命周期。这样的数据才是有 意义的数据,可以在系统和网络中长期的进行共享而一旦数据持久上升为对象 持久,数据模型和过程模型的分开构建就上升为对象模型的统一构建为了实现 对象的持久和对象模型的统一构建,也就势必要求发展出新的技术来设计和构建 对象持久化。也就出现了本文所讨论的对数据持久层研究的必要删 但是,在利用面向对象技术开发软件的过程中,一直存在着对象关系映射 ( o b j e c tr e l a t i o n a lm a p p i n g ,o r m ) 这一经典问题这是因为在使用面向对象技 术的同时,又广泛地使用着关系型数据库管理系统( r e l a d o n a ld a t a b a s e m a n a g e m e n ts y s t e m ,r d b m s ) 。因此,当构造企业级应用系统时。o r m 的实现 是一种耗时、艰难的工作0 1 。于是。有人提出了改进r d b m s 的机制使之成为对 象数据库。但实际上,姑且不论这种对象数据库的实现有多难就r d b m s 而言, 仍是时下正在使用的主流数据库技术。为此,解决o r m 问题的有效途径只能是 在数据库层之上寻找解决方案 一般而言,基于面向对象( a b j e c to r i e n t e d ,) 技术开发的应用软件系统通 常采用三层结构,即表示层、业务逻辑层和数据库层业务逻辑层通常又可以进 一步地划分成若干层其中,与数据库打交道的层次主要用来实现对数据库的访 问。也就是说,o r m 问题实际上就是如何实现数据存储和访问的问题,该问题 通常也称作为数据持久性问题。解决数据持久性问题的一种简单、可行的方法就 是设计一个数据持久层的框架机制,并利用这个框架完成应用系统与数据库的数 据交互 持久层框架是一组软件服务,将应用程序与该程序所使用和操纵的数据源分 离。持久层框架位于数据源之上,提供访问这些数据源的应用程序接口,典型的 产品有j d b c ,j d o 和实体e j b 等。持久层框架所提供的服务应该完全抽象并隐 藏操纵数据的细节。持久层框架就是数据访问对象( d a t aa c c e s so b i e 吐,d a o ) 及其隐藏的对数据源的访问机制m 硕士学位论文第一章绪论 持久层框架提供下列服务,让开发者在持久层框架之上建立应用程序。 ( 1 ) 提供将数据持久层功能从表示层剥离的整洁机制。只有业务逻辑层可以 访问数据库。业务层用d a o 模式与数据库交互,而不用j d b c 之类的数据访问 a p i 访问数据源 ( 2 ) 保证建立在持久层框架之上的应用程序能够容易地访问数据所在的数据 库。将所有数据连接逻辑都包装到数据访问对象中后,业务应用程序的丌发者不 需要知道连接的数据库类型,以及连接数据库时所需的任何安全信息( 用户i d 与 口令) 或数据库网址等,即开发者对这些内部操作是透明的。 ( 3 ) 抽象数据库中存储数据的物理细节和数据库中数据实体之问存在着的对 应关系。依据这些关系以及所提供的持久性框架,使得建立在这种体系结构布局 上的应用程序,可以不必直接对数据库发出s q l 查询,不必知道数据的物理结 构。而用数值对象( v a l u e o b j e c t v o ) 访问数据库。 ( 4 ) 简化开发过程,隐藏打开数据库连接,发出数据读取与操纵命令和事务 管理的细节。d a o 与v o 模式完全分离了业务应用程序的开发者与所使用的数 据源,开发者只需通过简单接口就可以读取或操纵相应的数据。 o r m 有时也被称为o r m a p # n g 。对于实际应用来讲,对象一般指面向对 象编程方法中的对象,关系指关系型数据库与传统的直接操作数据库相比, o r , m a v i s 有以下优势: ( 1 ) 采用面向对象的封装,使得数据库底层细节对程序员是透明的。程序员 可以集中精力解决业务逻辑,而不必关心如何从数据库中获驭什么字段、如何向 数据库中存储这些字段到等操作。 ( 2 ) 应用程序结构清晰,易于维护。采用o r m a p p i n g 技术时,应用程序中可 直接使用对象进行操作,因而,相对于包含着大量的对数据的存取、修改等操作 的应用程序而言,采用o r m a p p i n g 技术后应用程序的代码将具有更加清晰的 结构,代码更易于维护 ( 3 ) 应用程序具有更好的扩展性。利用o r m a p p i n g 构造数据持久层后,由于 业务逻辑层与数据库操作被分离,就使得整个应用程序具有了良好的扩展性。当 用户需求发生变化时,可以针对相应的程序模块,以较小的代价来实现用户需求 的变化功能。 ( 4 ) 程序开发更加简单,有利于加快程序的开发速度。对于系统设计人员, 在设计完成数据库文件结构之后,利用o r m a p p i n g 技术,可以将数据以对象的 形式提供给程序员使用。程序员无需了解对数据库的操作,因为他们操作的是各 种对象,他们对于如何从数据库取得数据来构造这些对象,或者哪些对象需要持 久化并且如何将这些对象保存到数据库中等相关问题,可以一无所知。 硕士学位论文第一章绪论 ( 5 ) 更容易开发可复用的组件。由于程序中只直接与对象交互,因此在组件 或程序模块复用过程中,只需实例化具体对象即可。这就使得程序逻辑的抽象化 程度变得更高,因而软件开发的可复用性也就得到了提高。 但是,目前的数据持久化技术普遍存在着使用较繁琐、可重用性不高的缺点 这样就让数据持久层的设计过程工作量较大,而且数据持久层中经常出现的连接 泄漏等问题是系统瘫痪的主要原因之一。所以,用轻量级、可重用的数据持久层 构件作为辅助来对数据持久层进行设计和构建,具有快速、方便、安全的特点, 由此可见,对于轻量缓、可重用的数据持久层构件的研究是具有现实意义和理论 意义的。 1 2 国内外发展现状 对于任何一个系统的开发来说对数据和过程的开发都是不可缺少的基本要 素。其中的数据是静态的部份,过程是动态的部份。目前对于数据的持久化多采 用的是文件系统、关系数据库存储机制以及刚刚发展起来的对象数据库存储机 制。对于过程的处理则采用高级语言来进行。随着面向对象思想的提出数据与 过程都被封装到“对象”当中,两者被细粒度的耦合在了一起,这样的。对象” 无疑能够解决数据持久的问题。但同时也就需要一种新的技术来解决其持久化 现有持久层规范简介: 1 e j b 规范 e r a ( e n t e r # s ol a v a b e a n ) 规范中定义了实体b e a n 的两种持久化规范:b e a n 管理的持久化( b e a nm a n a g e dp e x s i s t e n c e , , a m p ) 和容器管理的持久化( c o n t a i n e * m a n a g e dp e r s i s t e n c e , c m pk 这两种持久方法都可以用持久层来实现。在b e a n 管理的持久中,b e a n 自己 承担持久化一个b e a n 的责任,开发者可以选择用硬编码s q l 或者使用一个持久 层来实现。在容器管理的持久中持久化在b e a n 开发者眼中看来是自动的,因 为其实际上使用了服务器中集成的持久层框架,如果使用关系数据库,开发者仍 然需要将b e a n 的属性映射到表的列。在实现实体b e a n 时需要完成以下类的开发t 主键类,远程接口类,本地接口类,工厂类,使用c m p 虽然不用学习s q l ,却 需要学习e j b 规范为c m p 定义的查询语言e j b q l 2 j d o 规范 j d o 0 a v a d a t a o b j e c t ) 为j a v a 对象规定了一个轻量持久机制,它是一个存储 j a v a 对象的规范。规范的两个主要目的是提供数据处理和访问机制的a p i 以及允 许规范的实现作为应用服务器的一部分 任何被j d o 实现控制的类都必须扩展p e r s i s t e n c e c a p a b l e 接口任何扩展 硕士学位论文第一章绪论 p e r s i s t e n c e c a p a b l e 接口的类的实例都可以看作是一个“j d o 实例”。这个接口定 义了j d o 实现使用的方法来控制类的实例。 通常会有一个由j d o 实现厂商提供的工具来完成普通的j a v a 类到“j d o 实 例”类的转化。这个工具可能通过不同的方法来实现。第一种方法是通过字节码 增强器来实现。一个j d o 字节码增强器把普通的j a v a 类转换成。j d 0 实例”类 的过程就是把扩展p e r s i s t e n c e c l p a b l e 接口的方法的代码加到类中。第二种方法 是使用一个代码生成器,它解析现有的普通j a v a 代码然后输出一个扩展了 p e r s i s t e n c e c a p a b l e 接口的新版本的代码。 与c m p 相比,j d o 的优点是使用起来比较简单。如上所述,程序员只需要 像往常一样写一个类j d o 。厂商提供的字节码增强器或代码生成器会改造这个 类但是程序员需要为类写一个描述符x m l 文件。使用j d o ,程序员虽然不用 关心s q l 语句,却需要学习j d o q l ,就像使用c m p 需要学习e i b q l 一样。 3 h i b m a t e h i k l t c 是一种新的o & m 映射工具,它不仅提供了从j a v a 类到数据表之 间的映射,也提供了数据查询和恢复机制相对于使用j d b c 和s q l 来手工操 作数据库。使用h m e r n a t e 可以大大减少操作数据库的工作量。 在应用h i b e m a t e 框架时,首先编写o r 映射描述文件,完成对象、关系数 据库之间的映射。持久对象可以根据映射文件生成,然后编写业务逻辑类。这些 逻辑类实现了具体的业务逻辑,也封装了对h i b e r n a t e 的访问。h i b e r n a t e 在对象 范例和关系范例中建立映射关系( 0 瓜m a p p i n g ) ,将应用层中对对象的操作直接 作用于关系数据库中的表,使程序员不用再去关心数据库的操作问题。 4 i b a t i s i b a t i s 相对h i b e r n a t e 则另具特色,i b a t i s 采取了更加开放的设计,通过i b a t i s , 可以控制更多的数据库操作细节相对而言h i b e r n a t e 对持久层的设计较为封 闭,封闭化的设计对持久层进行了较为彻底的封装,从而将底层细节与上层架构 完全分离。大多数情况下,特别是对于新系统,新产品的研发而言,封闭化的设 计带来了更高的开发效率和更好的封装机制,但是在某些情况下,却又为一些必 须的底层调整带来了阻力,如在对遗留系统的改造和对既有数据库的复用上,表 现出灵活性不足的弱点 1 3 本文研究内容 本文工作主要围绕对象关系映射及数据持久层中以下几个方面的问题展开 研究: 硕士学位论文 第一章绪论 ( 1 ) 对象关系映射相关理论的讨论分析 对象关系映射是数据在关系模型和对象模型之间的相互转换的过程,对象 模型侧重于从包含数据和行为的对象中构建应用程序,而关系数据模型则主要针 对数据的存储。对象模型和关系模型之间的这种失配称为“阻抗不匹配”对象 关系的映射( o b j e c t r e l a t i o n m 印p m 亩是指这样的一种操作:它试图将对象的状 态映射到关系数据库的数据上,以便提供透明的持久性。 ( 2 ) 对象关系映射的具体实现 一般情况下,简单的映射方案就是。o n et a b l ef o re v e r yc l a s s ”。但是遇到类 继承或者关联时这种工作机制就比较复杂了。所以要分析和研究继承映射机制 的实现方式 最简单的映射是属性字段映射,复杂的有继承体系中的类之间的映射,以及 关联类之间的映射。继承映射和关联映射都可以分成三种情况来分别加以实现 ( 3 ) 数据持久层的设计 实现了对象,关系映射只是具备了设计持久层的基础,要设计一个好的持久 层还必须考虑各个方面的因素,例如对数据库的连接应该进行管理,对数据操作 应该有良好的封装,对事务的控制要有合适的机制,等等。 1 4 文章组织结构 全文共分六章: 第一章绪论。介绍本课题的研究背景意义、国内外展现状,主要的研究内容, 对全文结构有一个总体的介绍。 第二章对象关系映射相关理论。介绍了对象关系映射的相关理论,并提出 了当前对象关系映射所存在的一些问题,并归纳了对象关系的映射策略。 第三章对象,关系映射的实现介绍了对象关系映射的不同方式,从最简单 的属性字段映射到复杂的继承映射和关联关系的映射,都给出了具体实现。 第四章数据持久层设计对数据持久层的运行机制进行了详细分析和设计, 其中包括了数据库连接池,回调机制,事务处理等方面。 第五章数据持久层的应用。对本文所设计的数据持久层给出了一个具体的应 用实例,并将其与当前流行的0 1 7 m 映射工具h i b e r n a t e 进行了对比。 第六章总结与展望。对本论文的工作进行了总结,指出了还需继续研究和探 讨的问题,并对今后的工作进行了展望。 5 硕士学位论文 第二章对象,关系映射相关理论 第二章对象关系映射相关理论 2 1 对象关系映射简介 对象关系映射是数据在关系模型和对象模型之间的相互转换的过程,所以 在讨论对象关系映射前有必要先简单介绍这两种模型的一些概念 2 1 1 关系模垄 数据库是某个企业、组织或部门所涉及的数据的综合,它不仅要反映数据本 身的内容而且要反映数据之间的联系数据模型就是数据库中用来抽象、表示 和处理现实世界中的数据和信息的工具,通俗的讲数据模型就是现实世界的模 拟。一般的讲,数据模型是严格定义的一组概念的集合。这些概念精确地描述了 系统的静态特征、动态特征和完整性约束条件因此数据模型通常有数据结构、 数据操作和完整性三要素。 在数据库的发展史中出现了四种数据模型:层次模型、网状模型、关系模型 和面向对象模型。如前文所述,关系模型与层次模型、网状模型相比有建立在严 格的数学模型基础之上、关系模型的概念单一、数据独立性高等诸多的优点,而 面向对象模型由于有着标准化和性能两个问题还有待完善,所以目前关系模型在 数据库系统产品中占据了主导地位。 与数据模型的三要素相对应,关系模型三要素分别为关系数据结构、关系操 作集合和关系完整性约束w 。下面分别进行介绍: 1 关系数据结构 。 在关系模型中,无论是现实世界的实体还是实体之间的各种联系均用单一的 数据结构类型即关系( 表) 来表示,而数据操作的结果也是关系在用户看来,关 系模型中数据的逻辑结构( 关系) 就是一张二维表,表的每一行为个元组,每一 列为一个属性。从集合论的角度来看,关系就是笛卡儿积的子集关系可以有三 种类型:基本表( 基表) 、查询表和视图表。基本表是实际存在的表,它是实际存 储数据的逻辑表示。查询表是查询结果对应的表。视图表是由基本表或其它视图 表导出的表,是虚表,不对应实际存储的数据。关系模型要求关系必须是规范化 的,即要求关系模式必须满足一定的规范条件。 2 关系操作集合 关系操作的特点是集合操作方式,即操作的对象和结果都是集合关系模型 硕士学位论文第二章对象,关系映射相关理论 中常用的关系操作包括:选择、投影、连接、除、并、交、差等查询操作和增 加、删除、修改操作两大部分。早期的关系操作能力通常用代数方式或逻辑方式 来表示,分别称为关系代数和关系演算。关系代数是用对关系的运算来表达查询 要求的方式。关系演算是用谓词来表达查询要求的方式。另外还有一种介于关系 代数和关系演算之间的语言s q l s q l 不仅具有丰富的查询功能,而且具有数 据定义和数据控制的功能,是集查询、数据定义、数据操作、数据控制为一体的 关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准 语言。 3 关系完整性约束 关系模型中允许定义三种完整性约束:实体完整性、参照完整性和用户定义 完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件, 应该有关系系统自动支持用户定义完整性是应用领域需要遵循的约束条件,体 现了具体领域中的语义约束。 由关系完整性约束可以得到关系规则,这些规则告诉我们关系模型的表结构 中那些变化是允许的,那些检索操作是受限的。关系规则反映了数据模型的特点 和特定的数学假设,对关系结构的良好性状有重大意义,通过保证关系规则,使 数据库中数据正确、一致,一些最主要的关系规则”如下: ( 1 ) 第一范式规则:在定义的表中,关系模型坚持不允许古有多值属性或含 有内部结构的列。第一范式规则说明数据库系统能够处理的表对于手工处理的表 的限制。 ( 2 ) 基于内容存取规则一基于内容存取行,规定了关系数据库提供的基于表 的内容的检索方式。 ( 3 ) 唯一性规则:关系模型假设每个元组都有一个惟一标识符,这种假设是 根据存储在元组中的数据作出的。这种惟一标识符可以是单独的一列也可以是 几个列的组合。但表要求所有的行都使用相同的列或列组台作为惟一标识符 ( 4 ) 实体完整性规则;表t 中的任意行在主键列的取值都不允许为空,保证 了主键必须起唯一标识作用。 ( 5 ) 参照整性规则;参照关系中每个元组在外键上的值要么为空值( 外键的每 个属性值均为空值) 要么等于被参照关系中某个元组的主键值。保证了表之间的 联系。 2 1 2 对象模型 面向对象技术是一种新的程序设计规范,它的出现不仅相对于传统的面向过 程的程序设计方法更好地适应当今软件开发的需要同时也弥补了前述关系模型 7 硕士学位论文 第二章对象,关系映射相关理论 的固有局限性。面向对象方法通过各种工具让软件开发人员得以在问题域中表现 必要元素,从而提供了以问题描述问题的能力而不再是以解答执行所在( 计算 机) 的形式来描述问题。这种能力极大地提高了我们在解决问题过程中抽象化的 质量。 采用面向对象方法所建立的待解决问题的模型即为对象模型,对象模型用多 个对象来描述待解决的问题建立对象模型的作用是;抽取存在于问题域中的各 种对象实体,分析、明确这些对象实体的静态数据属性和动态操作属性以及它们 的相互关系,以反映出由多个对象组成的系统的整体功能和状态“1 。 面向对象技术和对象模型的核心概念和特征如下: 1 对象 对象具有唯一对象名和固定对外接口,是由描述其属性的数据和定义在其上 面的一组操作组成的实体,是对某个事物的一个抽象描述。其中对象名( 又称 对象标识符,o b j e c ti d e n t i f i e r ) 是对象区别于其它对象的标志;对外接口是对象 在约定好的运行框架和消息传递机制中与外界通信的通道;对象的属性表示了对 象所处于的状态,而对象的操作则用来表示对象的行为。对象最主要的特点是以 数据为中心,它是集成了数据和其上操作的独立的逻辑单位。 状态和行为是对象的主要属性。对象的状态又称为对象的静态属性,主要指 对象内部所包含的各种信息也就是变量。每个对象个体都具有自己专有的内部 变量这些变量的值标明了对象所处的状态。对象的行为又称为对象的操作,它 主要表述对象的动态属性,操作的作用是设置或改变对象的状态。 2 对象间的关系 一个复杂的系统必然包括多个对象,这些对象问可能存在如下关系;继承、 关联,聚合、组成、依赖 继承是两个对象之间的一种关系,即一个对象可以从另一个对象( 即它的父 对象) 继承状态和行为。对象间的继承关系就是类之间的继承关系,被继承的类 也可称为超类( 父类) 。继承父类的类称为子类 关联关系是对象与对象之间的联系,它使一个对象知道另一个对象的属性和 方法。关联可以是单向的,也可以是双向的。在面向对象模型中,关联关系通常 是使用实例变量实现的。 聚合关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关 系。与关联关系一样,聚合关系也是通过实例变量实现的”。 组成关系也是关联关系的一种,是比聚合关系还要强的关联关系。它要求普 通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。1 。在组成关系 中,一个部分对象仅属于一个整体对象,并且部分对象通常与整体对象共存亡。 8 硕士学位论文第二章对射关系映射相关理论 依j 受也是对象间的一种关系,它表示一个对象依赖于另一个对象的定义一 般依赖关系在对象模型中体现为局部变量,方法的参数,以及对静态方法的调用。 2 1 3 对象关系映射基本概念 一方面,砸向对象技术是应用于新软件系统开发的最常见的环境;另一方面, 关系数据库仍然是许多人都青睬的持久信息存储方法,并且在较长时问内这种情 况不太会改变。对象模型基于软件工程的一些原理,例如抽象、封装、继承、聚 合和多态,而关系数据模型则基于数学原理,特别是集合论的原理两种不同的 理论基础导致各自有不同的优缺点而且,对象模型侧重于从包含数据和行为的 对象中构建应用程序,而关系数据模型则主要针对数据的存储。对象模型和关系 模型之间的这种失配称为“阻抗不匹配”当为数据访问寻找一种合适的方法时, “阻抗不匹配”就成了主要矛盾:使用对象模型,你是通过它们的关系来访问对 象而使用关系数据模型,则通过冗余数据来联接表中的行 由于面向对象的模型和关系数据模型的“阻抗不匹配”需要存储在关系数据 库中时,需要进行对象关系的映射当应用系统中的对象。对象关系的映射 ( o b j e c t r d a t i o nm a p p i n g ) 是指这样的一种操作:它试图将对象的状态映射到关 系数据库的数据上,以便提供透明的持久性 a n s i - 一层数据库模型已经推出二十年了,但它至今还像过去一样广泛使 用。一般关系型数据库设计多参照这种模型。最接近物理数据库的内部模式也称 存储模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方 式,一个数据库只有一个内部模式,由d b m s 提供的s 札来描述。处于数据库模式 结构中间层的是模式,也称逻辑模式,逻辑模式由内部模式聚集而成,它是由数 据库用户规范的一些表的集合一般的逻辑模式是数据库物理模式作用域的边 界,它能实现数据库的物理意义、特定d b m s 的特殊操作对外部应用程序的信息隐 蔽。逻辑模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共 数据视图。逻辑模式既不涉及数据的物理存储细节和硬件环境,也与具体的应用 程序,与所使用的应用开发工具就程序设计语言无关外部模式是从特定用户应 用角度看待的数据库模式,它是数据库用户能够看见和使用的局部数据的逻辑结 构和特征的描述,是数据库用户的数据视图,从不同的应用出发对同一逻辑模式 可以给出多种不同的外部模式。 当外部应用系统以对象模型进行抽象时,从各个应用出发抽象出的对象模型 可以映射到关系型数据库的外部模式上,对此可称之为外部对象模型。但是,外 部模型只是概念模型的子集,所以面向对象的关系数据库设计核心在于系统对象 模型( 不妨称之为概念对象模型) 向数据库逻辑模式的映射,即对象关系的映射。 硬士学位论文 第二章对象,关系映射相关理论 而对象关系映射同时也是一个采用关系数据库的面向对象软件系统成功的决定 性因素之一。 对象关系映射解决方案一般把每个对象映射到数据库表的单个行上,这一 行通常来自一个表,但有时由一个表的连接操作产生。如果r d b m s 支持可更新 视图使用一个视图来简化映射或许是可能的。一般来说对象关系映射解决 方案允许这种映射不用自定义代码就能进行,从而向编程人员隐藏低级数据存储 细节。映射通常被保存在那些己映射类外部的元数据中。 对象关系映射在通常情况下工作得很好,可以达到提高开发效率、降低开 发成本及问题复杂度的目的,但有时可能就并非是最好的解决方案对象关系 映射是面向对象软件系统访问关系数据库最好的解决方案的假设是有疑问的。对 象关系映射既有优点,也有缺点,也就是说在使用它之前应该仔细考虑 对象关系映射的重要作用“是它消除了开发人员编写低级数据访问代码的 需要,这在某些应用中能够极大地提高工作效率,从而保证应用代码专心地处理 对象,以及能够导致创建一个可以支持多个用侧的域对象模型。 但是存在这样一种危险:对象关系映射降低总复杂性的程度不像把它用到 别处所降低的程度那么大即在某些应用中对象关系映射可能对降低总复杂性 的作用不大,而且对象关系映射本身也带来了新的复杂性。以j 2 e e 的容器管理 持久性实体组件( c o n t a i n e rm a n a g e dp e r s i s t e n c ee n t i t yb n n ) 为倒结果可能是复 杂的部署描述符,而且透明数据访问的代价是对这种访问的控制力度变弱 对象关系映射的效率也是有疑问的。对象关系映射解决方案一般假设 r d b m s 打算在单行和单列上操作。这是一种误解:r d b m s 在元组集上操作最佳。 例如。用单个s o l 操作更新多个行比分别地更新每个行要快得多。如果把数据高 速缓存在对象层是可行的,对象关系映射解决方案就会提供杰出的性能;如果 这是不可能的,或者在聚集更新被需要时,通常会显著增加系统开销。真正高级 的对象关系映射解决方案能使我们充分享受它的好处,同时又没有这些缺点中 的一部分。所以不应假设对象关系映射是所有使用关系数据库的面向对象软件 应用的最佳解决方案。它在某些情况中工作得很好,但有时没有一点好处。下面 是一个对象关系映射解决方案没有起到帮助作用的标志”; ( 1 ) 在对象驱动建模的情况中,它导致一个不自然的r d b m s 模式,其中该模 式限制了性能,并且对其它过程是无用的。一个不自然的r d b m s 模式的标志包 括常见数据操作中需要复杂的连接,r d b m s 不能实施参照完整性,以及在一个 较好的模式已经允许使用一个集合操作的地方却需要发布许多个别更新。 ( 2 ) 在数据库驱动建模的情况中,它产生一个对象层,其中对象与r d b m s 中的表有一个一对一的关系。除非这些表从对象模型中产生,否则这些表可能不 1 0 硕士学位论文 第二章对象关系映射相关理论 是真正的对象,而且处理它们可能是不自然的和低效率的。如果r d b m s 模式发 生变化,处理这些对象的所有代码也将需要变化。 在一个采用关系数据库的面向对象软件系统中实施对象关系映射通常包含 如下三个步骤 ( 1 ) 映射:选择有效的映射策略( 即如何映射对象模型到关系模型) 将对象模 型向数据库关系模型映射,这就是类向数据库表的变换过程。需要映射的除了对 象的属性外还包括对象之间的关系和对象类之间的继承结构。 ( 2 ) 实现映射:选择适当的映射框架或技术、工具在软件系统中实现上一步 中的映射,通常可以设计一个位于业务逻辑层和关系数据库之间的对象关系映 射层来完成对象和数据库问的转换 ( 3 ) 性能调整z 为提供整体性能而对数据模型、对象关系映射及其实现、对 象模型等系统各方面进行适当的调整。 2 2 对象关系映射存在的问题 2 2 1 对象驱动建模或数据库驱动建模 采用关系数据库的面向对象软件系统需要进行对象关系映射。而我们面临 的第一个问题是建立软件应用系统中数据模型时是采用对象驱动还是数据库驱 动。 采用对象驱动建模时数据建模由一个对象层( 通常是一个实体对象层) 驱动 而且该层体现了软件应用的持久性域对象的概念。一个例子就是使用一个像 r a t i o n a l r o s o 那样的建模工具从一个u m l 类模型中生成r d b m s 表 采用数据库驱动建模时数据模型有数据库模式驱动。这种方法基于目标数据 库的特征来创建一个数据库,用于有效地描述要被持久保存的数据。一个例子是 设计一个与要被持久保存的数据相适应的r d b m s 模式,然后编写访问和更新该模 式的高级编程语言程序代码 对象驱动建模有很大的吸引力,它的优点包括: 更大的自动化潜力。或许,我们将能够使用一个建模工具自动生, 成l r d b m $ 模式并生成高级编程语言程序代码,而不是手工生成数据存储对象我们还将免 于在应用代码中编写s q l 觑:使用其它数据库特有技术在开发中,自动化的使用 会明显提高工作效率 更大的可移植性。由于对象模型与数据库间的一个抽象层是必不可少的,所 以不用修改对象模型就能使该应用以不同的数据库为目标是可能的 当使用一个对象数据库时,自然想到的将会是对象驱动建模相反,当使用 硕士学位论文 第二章对象,关系映射相关理论 关系数据库时,数据库驱动建模的各种理由就会占上风: 对象驱动建模通常意味着丢弃数据库的许多能力,比如存储过程和有效地自 义查询的潜力。 对象驱动建模降低了体系结构的灵活性。它紧密耦合高级语言代码和 r d b m s 模式。或许,这种模式能在一个不同的数据库中被创建,如果该应用被 移植。但是,如果有修改数据库模式的其它业务原因,将带来很大的工作量。 数据驱动建模通常会提供更好的性能,这常常是一个决定性的问题。 数据库之间的可移植性可能不像看起来那样是个优势,而且在实践中可能是 不可实现的。 对象驱动建模易导致忽视基础数据库技术专家的意见,而这些数据库专家通 常拥有开发企业应用方面的宝贵经验 虽然对象驱动建模很吸引人,但有实际的风险。它的根本问题是它忽略了如 下事实:关系数据库是非常复杂的应用。而它已通过实践证明了它工作得非常好。 当然,对于不同的软件项目应用根据具体情况针对各种因素进行仔细分析比 较,以确定采用对象驱动建模还是数据库驱动建模甚至是两者的结合。例如对于 一个j 2 e e 项目,通常比较适宜用数据库驱动建模。因为虽然数据库驱动建模可 能需要编写更多的j a v a 代码,但总体上将可能有更少的代码。而且,它给了我 们数据和j 2 髓实现这两方面的更大控制权,它提供了处理任何性能问题的更大 空间如果使用得当,它不会降低可移植性 2 2 2 对象关系阻抗不匹配 乍看起来,在对象与关系数据库表的行之间似乎有着简单的对应关系。对象 是类的实例,它的内部数据的结构及其它一些特征由某个类定义类似的,关系 数据库的模式定义了数据库表的结构,如这些表包含那些列。类的实例( 对象) 与数据的行( 元组) 以相同的方式包含着数据。 然而,关系模型和对象模型有很大的差别。关系数据库基于排序和检索数据 的数学概念,关系数据库设计的目标是规范化数据以消除数据冗余度。面向对象 设计的目标是通过把一个业务过程分解成具有标识、状态和行为的对象来建模一 个业务过程。关系数据库不支持诸如类、继承性、封装或多态性这样的对象概念。 现代r d b m s 不只是一个数据存储系统,而且也能够保存保证数据完整性的规则 和作用于数据的操作。可是,这并不等于行为作为对象定义的一部分的o o 包含。 由于面向对象的模型和关系数据模型之间这种差异,对象关系映射提出的难题 常常集体地称为“对象关系阻抗不匹配”( o b j e c t - r e l a t i o n a li m p e d a n c e m i s m a t e ) 其中部分关键问题是如何用关系数据库的表表示对象的下列属性; 硕士学位论文 第二章对象,关系映射相关理论 1 对象的唯一性 o o 模型中的对象都必须有自己唯一的对象标识符( o b i e c ti d e n t i f i e r s , o n 3 ) 以区别于其他对象。以j a v 删象为倒,在某个j a v a 虚拟机中的j a v a 对象是通 过在确定时刻该j a v a 对象的引用( 实际引用代表着该对象在内存中所占空问的地 址) 来区别于其他对象。o ”两个对象可以拥有相同的状态,但它们必须具有不同 的对象标识符。同样,关系数据库中的行之间必须可以相互区分,而这种区分是 通过数据库中每个表的行必须具有的唯一不重复且不为空的主键值来进行的。我 们面临的问题是如何在关系数据库中表示对象的唯一性,即如何在数据库表的主 键与对象标识符之间建立映射。 2 对象的状态 对象是有状态的实体,当我们用关系数据库来保存对象的状态时,通常会将 对象的状态,即对象所含有属性的值存储于映射的数据库标中,这存在着许多包 括映射策略和性能等方面的问题。如怎样在个s q l 查询结果中的列值与对象的 状态之间进行转换,怎样在已映射对象的状态发生变化时有效地进行s q l 更新。 在o o 模型中对象的简单类型属性与关系数据库标的列之间可以简单的进行 相互转换,但如果对象的属性是复杂类型的话,问题就要复杂的多,因为关系数 据库数据类型简单,它只能理解存储简单数据类型。 3 对象的继承 o o 模型中对象间有继承关系,而关系数据库无法直接支持对象间的继承关 系,所以当在关系数据库中表示继承层次关系时,会存在如何为已映射到关系数 据库上的对象中的继承性建立模型的问题。 4 对象问的关系 在o o 模型中对象可以仅仅是类的简单实倒但在规范化的数据库模式中问 题就没那么简单。这是因为对象间存在着复杂的关系,这些关系包括关联,聚集, 组成。利用o o 模型可以简单建立的这些关系在关系数据库中就需要耗费大量的 时间和精力来维护,并带来了很大的复杂性。例如在对象模型中简单的多对多 关系在关系数据库中就可能需要复杂的外键管理策略。 2 3 对象关系映射策略 由于r d b m s 是以二维表为基本管理单元的,所以在使用关系数据库的面向 对象软件应用中对象模型最终是由二维表及表间关系来描述的。换言之,对象模 型向数据库关系模型的映射就是类向数据库表的变换过程,通常一个类可以映射 为一个或一个以上的关系数据库的表。在本章中,将描述一些将对象映射成关系 数据库所需的基本技术需要注意的是,这些基本技术只是最普遍的变换规则, 硕士学位论文 第二章对象关系映射相关理论 有些对象关系映射框架可能会采用一些完全不同的变换规则,那就要看具体实 现的对象关系映射框架。 2 3 1 对象标识符映射成主键 类映射成关系数据库的表时,对象标识符的映射是首要问题,通常将对象标 识符( 一般是对象的某个属性) 映射成数据库表的主键即可“”,并在每次在数据库 中存储新对象时为该对象在数据库中生成一个新的主键。”( 即对象标识符o i d , o b j e c ti d e n t i f i e r ) 。问题在于如何选择主键和主键的生成策略。 在实际应用程序中,绝对不要用任何与业务相关的对象属性作为数据库中的 主键,因为这样只会带来麻烦。主键值应该是一个对象独一无二、不可变更的身 份标识“”,而那些与业务相关的身份标识都是有可变更的。只是目前的业务或许 不允许它变更而己例如一个居民登记系统用身份证号码作为主键,当身份证号 码从,5 位升级到1 8 位时,会带来很大的麻烦。所以,当要实现对象关系映射时。 不要考虑“用哪个对象业务属性作为主键”这样的问题,而应该使用代用键,即 没有业务含义的主键。代用键更容易处理,并且可以产生更好的性能以及
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗器械维修工程师岗位招聘考试模拟题及解析
- 任务一 认识吉祥物说课稿-2025-2026学年初中劳动技术浙教版九年级上册-浙教版
- 辽宁省朝阳市2025年-2026年小学六年级数学课后作业(上,下学期)试卷及答案
- 我的课外劳动日记(一)说课稿-2025-2026学年小学劳动人教版一年级下册-人教版
- 2025年养老护理员中级安宁疗护理论模拟题及解析指南
- 2025YY公司行政人员劳动合同
- 2025年华为财务岗位招聘面试深度解析与模拟题集
- 第16课《我的叔叔于勒》说课稿 2025-2026学年统编版语文九年级上册
- 2025年乡镇教师招聘考试教育教学能力测试题库
- 2025年中华传统服饰文化学习资料及模拟题集初级
- 湘科版科学六年级上册全册教案(含反思)
- GB/T 44823-2024绿色矿山评价通则
- 人教版PEP小学六年级英语上册教学计划及教学进度
- 《色彩的对比》教学设计-1色彩的对比-五年级上册美术
- 4.4车体主要伤损形式及检修课件讲解
- 无犯罪证明委托书模板
- 《柔性棚洞防护结构技术规程》
- MOOC 高等数学先修课-西南财经大学 中国大学慕课答案
- 装备资产的动态管理
- 工程造价专业《制图实训》课程标准
- TCACM 1524-2023 中医体重管理临床指南
评论
0/150
提交评论