



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
两安建筑科技大学硕士论文 j 2 e e 架构中数据持久层的研究与实现 专鼗:嚣嚣祝应蔑 硕士擞;张党进 捂导老撵:赵文静教授 摘要 论文瓣数据对象与关系数握露之闼浃瓣理论耪持久识对象管瑗攘本遨行了 研究和实现。在基于m v c 模式设计与开发分布式应用系统时,业务逻辑层中访 阏数据库及其数撼的存取楚一个缀藿要戆谖题。论文从设谜层之藏藕合牲、露自 对象设计蹲考虑,提出了持久层设计思路。 当前,基于w e b 应用系绞开发中,对持久层的设计和实现方法,出现了工具 化类、e n t i t yb e a n 、j d o 等诸多的方式。这些方法给应用开发人员提供了数据对 象的c r v d 操作接口。数据对象中数属我是通过中闯细节封装与数握库袭来实 现数据通信。本文从数据对象存储的角度出发,对比了文件系统和数据库两种实 现方式,结合o r m 的相关理论,从数据对象和数搬库表之间的相似之处秘阻挠 不匹配问题出发,详细分析了类之间的继承、组合获系在关系数据席中表的生成 及其关系定义;将关系数搬库中表之间的三秘关联关系应用于业务逻辑中类的生 成和层设计。在数据对象耩性和数器库表闯的通信中,通过对数据对象在c a c h e 中的三种状态( 临时状态、持久化状态、游离状态) 及其棚互转化实现了对数据 对象酶容器管理。 论文邂深入分析了基于x m l 文本对缘数据的存储和实现。通过j a x b 技术 支持,数据对象通过s e r i a l i z a b l e 蓟x m l 文本和x m l 文本通过p a r s e 至l 数据对象 之间的转换来实现数据对象的存储,最后还分析了以数据为中心和以文档为中心 静x m l 菇数据露中的存储。 论文以作者参与设计开发的项目“陕西电力客户服务支持系统”为背景, 遴行了大黧静理论分橱、研究与实践,在魏基穑上,提毒了作者静持久基设计思 路并且加以实现,运用到了项目中,取得了良好的效果。 。 燕键字:数据对象 持久化映射 第1 焚 西安建筑科技大学硕士论文 r e s e a r c h & r e a l 豇l a t i o no fd 姒p e r s i s i e n c ei a y e r l n i 田匮j 2 e ew r a m 匝w o r k s p e c i a l i t y :c o m p u t e ra p p l i a c t i o n n a m e :d a n g j i nz h a n g i n s t r u c t o r :p r o f w e n j i nz h a o a b s t r a c t i nt h i sp a p e r , i tr e s e a r c h e sa n dr e a l i z e st h em a p p i n gt h e o r yb e t w e e nt h eo b j e c t a n dr e l a t i o n a ld a t a b a s e ,a n dm a n a g e st h ep e r s i s t e n to b j e c t s b a s e do nt h em v c d e s i g n m o d e la n dt h ep r o g r a m m i n gd i s t r i b u t e da p p l i c a t i o ns y s t e m ,t h ed a t aa b o u tr e a d i n g a n dw r i t i n gi nt h eb u s i n e s sl o g i cl a y e ri sv e r yi m p o r t a n tt o p i c i tt a k e so u tt h ed a t a p e r s i s t e n tl a y e rb yc o u p l i n ga n do o d c u r r e n t l y , t h e r ea r em a n ya p p r o a c h e st os a v et h ep e r s i s t e n tl a y e ri nt h ew e b a p p l i c a t i o ns y s t e mp r o g r a m m i n g ,s u c ha st o o lc l a s s ,e n t i t yb e a n ,j d oe t c ,w h i c h p r o v i d et h e i n t e r f a c e o fc r v do p e r a t i o na b o u tv a l u eo b j e c tf o rt h eb u s i n e s s p r o g r a m m e r , w h i c hr e a l i z e sd a t ac o m m u n i c a t i o n sb e t w e e nt h ea t t r i b u t eo fc l a s sa n d t h et a b l eo ft h ed a t a b a s eb yc o n c e a l i n gt h em i d d l eo p e r a t i o n i nt h i sp a p e r , b a s e do n t h eb a l a n c eo ft h ef i l es y s t e ma n dd a t a b a s es y s t e ma b o u ts t o r i n gv a l u eo b j e c t , p a r t i c u l a r l ya n a l y s e sh o wt og e n e r a t et h ed a t a b a s et a b l ea n dr e l a t i o n sf r o mt h e i n h e r i t a b l e ,a s s e m b l e dc l a s s e sa n dh o wt od e s i g nt h ec l a s sf r o mt h er e l a t i o n a lt a b l e s b yt h ec o n v e r s i o no ft h et h r e es t a t e si nt h ec a c h e ( t r a n s i e n t ,p e r s i s t e n t ,d e t a c h e d ) ,i t m a n a g e sv a l u eo b j e c t si nt h ec o n t a i n e r s e c o n d l y , i ta n a l y s e sd e e p l yh o wt o s t o r et h ex m lt e x t w i t ht h ej a x b t e c h n o l o g ys u p p o r t i n g ,d a t ao b j e c tm a yc o n v e r ti n t ox m lb ys e r i a l i z a b l ea n dr e v e r s e o p e r a t i o nb yp a r s et os t o r ed a t ao b j e c t ,l a s t l ya n a l y s e sh o w t os t o r ex m ld a t ai nt h e d a t a b a s eb yt h ed a t a c e n 仃i c d o c u m e n t sa n dd o c u m e n t c e n m c d o c u m e n t s t h ep r o j e c t “s h a a n x ic u s t o m e rs e r v i c e s u p p o r ts y s t e m ”w h i c ht h ea u t h o r p a r t i c i p a t e ds u b j e c t ,i st h eb a c k g r o u n do ft h ep a p e r p l e n t yo ft h e o r e t i cr e s e a r c h , d e s i g np r a c t i c ea n dd e v e l o p i n gw o r kh a v eb e e nc a r r i e do u t b a s e do nt h ep r a c t i c e ,t h e p r e s e n t e df r a m e w o r ko fp e r s i s t e n tl a y e rh a sb e e ni m p l e m e n t e da n da c h i e v e df i n e r e s u l t k e yw o r d s :d a t ao b j e c t p e r s i s t e n tm a p p i n g 第页 声明 本人郑重声明我所呈交的论文是我个人在导师指导下进行的研究工 作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外, 论文中不包含其他人已经发表或撰写过的研究成果,也不包含本人或其他 天在其它单位已申请学位或为其它用途使用过的成果。与我一同工作的同 志对本研究所做的所有贡献均已在论文中作了明确的说明并表示了致谢。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 论文作者签名:否谤凌也 关于论文使用授权韵说明 日期:训、弓7 , 本人完全了解西安建筑科技大学有关保留、使用学位论文的规定,即: 学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布 论文的全部或部分内容,可以采用影印、缩印或者其它复制手段保存论文。 ( 保密的论文在论文解密后应遵守此规定) 谳撇:搬翩躲趟嗽础丸。 注:请将此页附在论文首页。 西安建筑科技大学硕士论文 1 1 课题背景及其意义 第一章绪论 j 2 e e 是s u n 公司提出的多层、分布式、基于组件的企业级应用模型。在这样 的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机 上,并且处于相应的层次中。所属层次包括界面显示层、w e b 层、b u s i n e s s 层、 企业信息系统( e i s ) 层。目前大多数企业采用j 2 e e 技术的结构设计与解决方案。 作者参与设计开发的陕西电力银河信通有限责任公司的项目陕西电力 客户服务支持系统,图1 1 是该项目的体系结构图。 铷鬻蠛瓣 郦,溉 佣接口 7 0 d b c 国 蘸甄稀:甜 、一 霉 雾鬣k 。赙蠢 、 0 圆 啊黯藜萄, 瀚隧露攀麓禽, , j o b c 洳虹聊遴 界面表现层i w e b 应用层:业务逻辑层 ;数据持久化层 图1 1 、系统体系架构 该项目中,采用了s t r u t s 应用开发模式进行w e b 层的设计,业务逻辑层主要 是在s t a t e l e s ss e s s i o ne j b 中实现,其中访问数据库的细节是通过工具化类封 装在s t a t e l e s ss e s s i o ne j b 调用实现。 本文是作者在该项目中所承担的“数据库访问”模块的研发中,基于j a v a 程序设计语言中类映射机制,提出了数据对象持久化来实现数据存取的解决方 案。w e b 服务应用开发中,数据库访问的解决方案,目前已经提出了对象持久层 ( o p l ,o b j e c tp e r s i s t e n c el a y e r ) 的概念,但是现有的解决方案各有特色。 o p l 是在数据库层和业务逻辑层之间“桥梁”。因为在业务逻辑层中的数据是 封装在类中,而在数据库层,是用基于关系数据库的结构化的二维表对数据持久 性保存;那么要从数据库中读写数据,这就要求和类中的数据保持一致:从数据 库查找的数据查询出来后要求放在类中,而从业务逻辑层返回要求保存的数据必 第1 页 西安建筑科技大学硕士论文 须从类中读取并存放在数据库中,这些相关的操作封装在持久层。这一层的提出 与设计是完全符合j 2 e e 架构设计要求的。这样在具体业务开发人员看来,对待 数据与磁盘读写就是对数据对象的创建、读取、更新和删除操作( c r v d ,c r e a t e 、 r e a d 、u p d a t e 、d e l e t e ) ;利于面向对象的设计和开发,也利于系统维护和扩充。 因为把对象数据与数据库通信的操作封装起来,从业务逻辑层中分离出来,增强 了层与层之间的耦合性,便于系统的维护和扩充,达到代码复用,这也是面向对 象设计的目标。 从开发过程来看,就是把数据对象的持久性操作从具体相关业务逻辑开发分 离出来,给业务逻辑层提供数据对象访问的公共接口,但是对于数据库访问的相 关操作,比如数据库连接、执行s q l 、关闭连接等操作是封装在这持久层。不但 是减轻了业务逻辑开发人员的负担,而且在项目管理上任务更加明确。 对持久层而言,就是实现在j d b c 基础上进行的又一次封装,实现通用的数据 库访问组件。 在业务逻辑层中直接访问关系数据库。 e 数据对象操作。 数据对象与数据库之间的映射和通信。 其实核心的就是异构体( 数据对象和数据库表) 之间的映射,因为建立好了 这个映射机制,我们就容易进行数据转换。这也是本文所要研究和分析的重点。 1 2 项目中的工作 本文的主要研究工作概括如下: 参与实现了该项目中数据库访问的工具类设计和代码实现、维护。 通过项目实践使用o r m 工具一h i b e r n a t e ,研究分析o r m 实现思路及其数 据对象的容器管理。 通过项目实践,分析对比了e n t i t yb e a n 和h i b e r n a t e 、j d o 等持久层实 现技术的区别。 分析x m l 文本存储数据对象和d t d 与数据库模式之间的映射。 本文的目的就是通过建立类和数据库表这两种异构体之间的映射,来实现业 务逻辑层数据对象与数据库表的数据通信和容器管理数据对象来实现数据对象 的数据库存储方案,从而解决业务逻辑层中的对象持久化问题。 1 3 本文组织 全文分为六个部分来阐述: 第一章绪论介绍了本文的技术背景及研究意义,同时简单地介绍了本文的工 作及内容组织。 第二章研究j 2 e e 多层架构的m v c 设计模式,介绍了在现有的技术中,解决 在业务逻辑层访问数据库的方案以及作者参与项目中的设计思路,在此基础之 上,分析讨论了o r m 的实现机制。 第三章介绍了数据对象的几种存储方式,着重分析了数据库存储解决方案。 在分析了对象与关系数据库异同的基础之上,接合实际项目开发,详细分析了 o r m 映射理论中关于类继承、组合和表之间的关联及其连接查询的实现思路。 第2 页 西安建筑科技大学硕士论文 第四章从数据对象的设计要求、在容器中的三种状态及其转换和二级缓存机 制的实现角度分析和实现了数据对象在j 2 e e 容器中的管理方式。 第五章在对x m l 数据读写操作之上,分析了以文档和数据为中心的两种x m l 文件存储方式,着重讨论了d t d 与数据库模式之间的映射。 第六章对全文进行总结,并说明有待进一步研究的两个方向,即:面向对象 数据库和x m l 数据库。 第3 页 西安建筑科技大学硕士论文 第二章持久层在项目中的解决方案 在多层架构体系中,持久层是从业务逻辑层与数据库层中间分化出来的一个 层,在设计中要求独立于数据库系统和业务逻辑层,给业务逻辑层提供数据访问 接口,其中封装了数据库连接和数据访问细节。基于m v c 设计模式开发中,以数 据对象为单元去访问数据库是方便了m o d e l 层的设计与开发。在现有的技术中, 有不同的实现方式。 2 1m i c 模式及其设计 j 2 e e 架构是一个多层的应用开发模式,m v c 模式是一个很好的解决方案。模 型一视图一控制( m v c ,m o d e l v i e w c o n t r o l l e r ) ,就是把一个应用的输入、处理、 输出流程按照m o d e l 、v i e w 、c o n t r o l l e r 的方式进行分离,这样一个应用被分成 三个层模型层、视图层、控制层。如图2 1 所示。 图2 1 、州c 三者之间的关系图 m v c 的优点之一是层之间耦合性强。对于应用开发人员来说,只要清楚业务 需求,那就很简单地“填空”。基于m v c 模式的应用开发模式如s t r u t s 、j s f 等, 这些具体的m v c 实施方案很好地实现了分层设计和开发。 作者参与的项目中,采用的是s t r u t s 应用模式,相对于j s f 而言,后者在 v i e w 设计开发上面更加客户化、工具化设计页面和基于数据单元提交控制。而 s t r u t s ,在数据提交方面是基于a c t i o n f o r m 的表单来实现。这样存在一个问题: 很容易把从数据库读出来的数据对象( v o ,v a l u eo b j e c t ) 直接当作s t r u t s 的 a c t i o n f o r m 来应用。这样的优点是简化了代码设计,也就是从页面到数据持久 层,是通过v o 来传递数据和数据内存存放的。但却严重损坏了层之间的耦合性, 增大了维护的难度和复杂性。当然,这样的问题在j s f 中就可以避免,因为在j s f 提交中是基于单个数据进行的,减小了对象粒度,a j a x 技术是更加深化这个问 第4 页 西安建筑科技大学硕士论文 题的研究与实践。 图2 2 是作者在开发中,基于m v c 模式的设计框架。 ( ? 图2 2 、基于m v c 模式的设计框架 在视图v i e w 层和控制c o n t r o l 中,主要是通过f o r m 来传递数据。用户在客 户端输入数据,然后向服务器发出请求,这个过程7 虎是把基于文本的h t m l 描述 信息装载在h t t p r e q u e s t 中,通过h t t p 协议进行# 二程传输;在服务端通过对h t m l 字符流进行解析,分解出数据操作( 其。实,这个处理就是来读取 s e r v l e t r e q u e s t g e t p a r a m e t e r ( ”d a t a n a m e o p e r a t i o n n a m e ”) 来读取。在s t r u t s 中,采用的标签+ 组件的形式,在调用a c t i o n 的e x e c u t e 0 方法时,已经把页面 数据进行分离并封装在f o r m 中) ,把数据封装f o r m 中。在c o n t r o l 中从f r o m 的实例化子类中提取数据,这样就通过在c o n t r o l 层调用m o d e l 层来实现数据处 理,返回的处理数据存放在f o r m 中,通过在服务端编译成h t m l 装载 h t t p r e s p o n s e ,通过网络传输在客户端页面显示。 在c o n t r o l 层与m o d e l 层之间,交换数据是开发人员设计的数值对象v 0 。一 般m o d e l 层是在s e s s i o ne j b 中封装起来的,m o d e l 层包含具体的业务逻辑处理, 从c o n t r o l 层传入参数,经过业务逻辑处理后的数据,返回c o n t r o l 层,通过转 发送到客户端显示。 对于上面两层间的数据传递,我们首先要考虑的是网络传输问题,把对象序 列化( s e r i a l i z a b l e ) 是处理分布式通信机制常用的方法。通常,要用数值对象 作为参数,序列化就是把类m a r s a l 成字节流的形式来进行网络传输;在接收端, 把接收到的字节流进行u n m a r s a l ,转换成数据对象,来实现数据信息的网络传 递。在j 2 e e 应用开发中,f o r m 和v 0 都要继承s e r i a l i z a b l e 。 另外,在c o n t r o l 中需要把v o 和f o r m 进行转换,如图2 2 中的c o n v e r s i o n 模块。这里转换工作是利于分层开发,可以减少模型层与控制层的耦合度,提高 两个层之间的可扩展性和维护性,达到更大程度的复用。 视图页面是一个很复杂的工程,处理这方面的技术也是日新月异。但各种技 术基本是趋于数据元素和样式的分离。目前的a j a x 技术是基于x m l h t t p r e q u e s t 向用户发送请求j 由s e r v l e t 处理,然后返回x m l 的处理结果。这样更进一步细 化了页面数据的提交粒度,也是避免了s t r u t s 中的一个a c t i o n f o r m 对应一个 a c t i o n 处理方式。 第5 页 西安建筑科技大学硕士论文 2 2 持久层的解决方案 在j 2 e e 项目应用开发中,以对象的方式访问数据库有几种不同的方式 工具化类、实体b e a n 、j d o 、o r m 等,每个项目选择某种方式都跟该项目的大小 及其公司所倡导的技术有关。比如,如果项目很小的话,一般在设计上就是应用 产品化的工具,但是如果是大项目,项目组可以考虑自己编码来实现,这有利于 项目的系统集成和维护。无论采用何种实现方式,都应更多地从技术和使用价值 的角度去分析对比。 实体b e a n 目前是基于e j b 2 0 规范,对本地接口的引入以及对容器管理的建 模和容器管理的持久性是我们使用实体b e a n 的有效途径。当然,实体b e a n 在重 量级运行时基于构架,存在一些不足之处,在2 0 0 4 年发布的e j b 3 0 规范种,对 上述这些问题进行了改进和完善。 j - d o ( j a v ad a t a b a s eo b j e c t ) 是s u n j c p 给出的用以描述j a v a 对象的存储 中立的持久层规范和参考实现,它使用普通的j a v a 对象( p o j o ,p l a i no l dj a v a o b j e c t s ) ,作为持久性对象,对应用代码隐藏数据库访问细节,使用b e a n 分布 事务管理,以及用对象缓存技术减少对数据库的访问。 基于p o j o 和动态代理的轻量级的h i b e r n a t e 是一个面向j a v a 环境的o r m 数 据库映射工具,h i b e r n a t e 不仅仅管理j a v a 类到数据库表映射,还提供数据查 询和获取数据方法,可大幅度减少开发时人工使用s q l 和j d b c 处理数据的时间。 2 2 1 项目中采用的方案 作者基于j 2 e e 应用开发项目中,在业务逻辑层处理数据访问采用了“抽象” 出一个基于数据对象操作的工具类。原因之一是,项目分四个字模块,由不同的 开发人员来负责,为了统一数据库访问底层设计实现和提高项目可维护性,由专 人负责实现和维护:其二,是为了减少项目开发时间,由于开发人员有各自的编 码思路,因此实现数据库访问时的思路也各不相同,这样不利于项目整体设计和 开发推进等。 项目中,采用j a v a 类映射机制。首先,建立数值对象v 0 与数据库表的对应, 其中在定义v o 的时候,要求其属性名称和类所对应的数据库表的字段名称相同 ( 当然,在数据库表中,字段的名称一般是大写,类属性一般是小写) ,还要在 v 0 中定义一个属性t a b l e n a m e ,来指出这个类对应的数据库中的哪张表。 其次,就是定义对象数据的操作方法。当然这个定义要求基于类的多态机制, 采用工厂设计模式来“通用化”操作方法定义。在方法定义时要求以父类为参数, 在方法调用的时候,通过传递的具体类对象来实例化方法中的父类,这样可以实 现类参数化。在具体的方法中,采用j a v a 类映射机制,通过调用类中的属性方 法g e t x x x 0 和s e t x x x 0 实现与数据库的数据进行读写操作,最后通过参数返回 给业务逻辑层。 把以数据对象为单元访问数据库过程“工具化”,封装在s t a t e l e s ss e s s i o n b e a n 中调用,这是利用了e j b 容器来实现访问数据库的事务、安全等管理,也 就是j 2 e e 中容器管理事务( c m t ,c o n t a i n e rm a n n a g e rt r a n s a c t i o n s ) 机制。实 现方法如下: 首先我们定义一个访问数据库底层的方法类b a s e d a o ,其中主要包括与数据 第6 页 西安建筑科技大学硕士论文 库连接、关闭,执行s o l 语句的数据库操作和返回查询结果r e s u l t s e t 。其次是 定义一个数据对象操作类d a o f a c t o r y ,主要包含数值对象v 0 的c r v d 操作,这 些是基本的数据操作。在每个操作方法中,根据操作名称和具体的v 0 属性拼写 s q l 语句,调用b a s e d a o 与数据库的访问。其中还涉及到从v o 中调用g e t x x x 0 和s e t x x x 0 方法来读写类中的数据。 下面以数据对象更新为例来说明: 首先,从v o 中读取数据,拼写s q l p u b l i cs t a t i cs t r i n gg e t u p d a t e s q l ( v ov o ) o b j e c tg e t o b j = n u l l :执行g e t 方法后返回的对象 s t r i n gg e t s t r i n g = :执行g e t 方法后返回的对象转换成的值 f i e l df i e l d :类的所有属性 f i e l df : s t r i n gf n a m e :v o 中属性的名称 i n tf m o d i f i e r s :v o 中属性的修饰( p u b l i c ,p r i v a t e ,p r o t e c t e d ) s t r i n gf t y p e :v o 中属性的类型( i n t ,l o n g ,s t r i n g ) s t r i n g b u f f e rs b _ r e s = n e ws t r i n g b u f f e r0 ;用来拼接s q l 语句( 第一部分) s br e s a p p e n d ( 。u p d a t e ) : s b _ r e s a p p e n d ( v o t a b l e n a m e ) ;这个t a b l e n a m e 就是在父类v 0 中定义的一个与 数据库对应的表名称 s b _ r e s a p p e n d ( ”s e t ”) : f t r y f i e l d2y o g e t c l a s s0 g e t d e c l a r e d f i e l d s0 :得到v o 的所有属性 f o r ( i n ti = 0 :i = o ) 如果没有字段,去掉最后的逗号 r e s = r e s s a b s t r i n g ( 0 ,r e s 1 e n g t h0 1 ) : e l s e 如果没有字段,返回空 r e t u r n : ) 组合成u p d a t e 语句 r e s + = w i e r e ”+ v o g e t c o n d i t i o n 0 : r e t u r nr e s : j 其中工具类u t i l _ j a v a c l a s s 中的方法i n v o k e m e t h o d 就是通过调用v o 中的 g e t x x x ( ) 来读取数据,f o r m a t _ a a a 就是把属性的第一个字母变成大写,与“g e t ” 拼写成g e t p r o p e r t y n a m e0 ,这是为了符合j a v a 中b e a n 的命名规则。其中,是 v o 中的g e t c o n d i t i o n ( ) 就是自定义的修改条件,如果不修改,在定义类v o 的时候,就是默认为主键约束。 然后就是调用b a s e d a o 中的更新数据方法来实现对象的更新。 p u b l i cv o i du p d a t e ( c d a t a b e a nd a t a b e a n ) t h r o w se x c e p t i o n s t r i n gs t r s q l = g e t u p d a t e s q l ( d a t a b e a n ) :得到s q l 语句 t r y b a s e d a o u p d a t e s q l ( s t r s q l ) : ) c a t c h ( e x c e p t i o ne x ) s y s t e m o u t p r i n t l n ( ”u p d a t ef o u n de x c e p t i o n ”+ e x ) : ) 这样来实现了数据对象v o 的更新。当然,数据对象查找,首先是通过读取 v 0 的属性名称来拼写s q l 语句,执行数据库查找返回r e s u l t s e t 结果后,然后 就是调用v o 中的s e t x x x ( ) 方法来把数据装载到数据对象v o 返回给业务逻辑 调用者。 这种实现o p l 的方法简单适用。表现为:第一,在设计上是达到了与业务逻 辑层的分离,降低了层之间的耦合度,在业务逻辑层看来扩展性和可维护性好; 第二,项目中各个子模块可以复用该类;第三,运行状态良好。 但要作为设计思路和方法进行推广,甚至产品化,作者认为,还远远不够。 首先,该方法只是能简单支持单个表的对应,没有实现表之间的关联情况下的映 射处理;其次就是数据库表和类对象可维护性差,在某种程度上来说,就是简单 地把类和数据库表“死绑定”,如果要修改数据库的字段,或者是增加、删除字 第8 页 西安建筑科技大学硕士论文 段,这样必须要求修改v 0 的类属性( 在项目实施中,我们是开发了一个工具, 从数据库表中直接生成所要的数据对象v o ) ,虽然是更新一下v o ,但是要涉及到 重新编译和发布,这样的维护修改在系统集成调试中是很浪费时间的。 该项目的o p l 解决方案在工具化处理o p l 和o 删的思想上给作者了极大的启 发和指导,也是深入研究和分析实现对象一关系数据库映射( 0 r m ,o b j e c t r e l a t i o n a ld a t a b a s em a p p i n g ) 的入手点。比如上面说到,如果修改了数据库 表中某个字段,则必须修改v o 中的属性,但是在o r m 中没有这种必要,因为这 种映射关系是在一个基于x m l 的文本中来描述的,这样既解决了“死绑定”问 题,又不失灵活性。 2 2 2 实体b e a n 的解决方案 实体b e a n 是一种企业j a v a b e a n ,用于表示某个持久存储( 最常见的是关系 数据库) 中的数据。 实体b e a n 是持久保存在某种存储的信息表示。实体b e a n 的主要目标就是表 示永久性业务对象。实体b e a n 通常表示数据库中的一行。实体b e a n 管理永久性 的内存副本。信息的缓存本可以用于减少访问时俱存储所需要的时间。当数据的 内存版本被修改时,实体b e a n 会联合e j b 容器来更新底层数据存储。这样,实 体b e a n 使客户不需要了解底层数据存储的实现,同时也不用了解永久性信息的 体系结构。 对于实体b e a n 而言,就是属于数据驱动模式,也就是说,从现存数据库表结 构中,来映射生成对应的b e a n ,其中b e a n 中包含b e a n 的数据的存取操作 ( g e t x x x 0 和s e t x x x 0 ) 和相关业务处理数据( 这些方法跟会话b e a n 一样,就 是开发人员自定义方法) 、生命周期管理函数( 如,e j b a c t i v a t e 0 ,e j b p a s s i v a t e 0 等) 。 本文要研究的重点来看,主要是研究分析实体b e a n 怎么实现数据对象b e a n 到数据库表之间的“映射机制”。首先从最简单的一张数据库表来看,我们主要 是从其配置描述文件入手( 这也是o r m 讨论的基础) 。 在e j b j a r x m l 文件中: ( ! d o ( t y p ee j b j a rp u b l i c ”s u nh 4 i c r o s y s t e m s , n c d t de n t e r p r i s ej a v a b e a n s 2 o e n ”h t t p :j a v a s u n c o m d t d e j b j a r _ 2 _ o d t d m y e j b e n t i t yb e a n 结构 a c c o u n t a c c o u n t t e s t l a c c o u n t r e o t e h o m e 一 t e s t l a c c o u n t r e m o t e t e s t l a c c o u n t h o m e ( l o c a l h o m e t e s t l _ a c c o u n t t e s t l a c c o u n t b e a n c o n t a i n e r 第9 页 ,西安建筑科技大学硕士论文 j a v a 1 a n g s t r i n g f a l s e 2 x a c c o u n t 定义b e a n 的数据属性 a c c o u n t i d 省略了e n t i t yb e a n 中其他的属性描述 a c c o u n t i d f i n d b y a c c o u n t l d s t r i n g a c c o u n t * r e q u i r e d 上面就是对e n t i t yb e a n 的相关描述,其中可以定义 就是把e j b q l 语句映射到b e a n 的h o m e 接口上的查询和b e a n 选择方法。 中包 括 和 ,定义查询函数的方法名称和参数。 这个查询用于指定查询的e j b q l 语句。 另外,需要定义一个部署描述文件c m p r d b m s x m l ,把容器管理字段映射到 数据库中的特定字段。 第1 0 页 西安建筑科技大学硕士论文 a c c o u n t k h f w d a t a s o u r c e a c c o u n t a c c o u n t i d a c c o u n ti d 省略b e a n 其他属性和表字段的映射描述 可以看出,这个映射定义跟后续要讨论的o n 映射文件描述很类似,但是相 对比复杂。 如果仅简单实现的单表映射,那么研究其映射机制是没有什么意义,但由于 在基于关系数据库中,表之间的关联关系与类之间映射才更具有实用意义,也充 分体现e n t i t y b e a n 的实现价值。 在e j b j a r x m l 描述中,我们首先定义两个e n t i t yb e a n 的关系,下面就是 一个:1 :l 关系说明。 幸丰车木料木桕# 事车半丰木丰木ah a sa nb 粑# 车轴e 扣i 扣 料粑# 术丰丰 # 丰料 丰桕e 木 ( e j b r e l a t i o n s h i p r o l e a - h a s a n b o n e a a s s i s t a n t 木车车丰丰术木丰木毒丰丰木木木木丰bb e l o n g st oa 木丰木丰丰丰丰术丰丰年丰 木丰丰丰丰术丰木半年丰木木 bb e l o n g st oa o n e b 一 ( r e l a t i o n s h i d s 其中两个e j b r e l a t i o n s h i p r o l e 元素定义了各对用于关系的每一端。在 m u l t i p l i c i t y 元素中定义了这种关联关系:l :l 、1 :m 和m :n 。 第l l 页 西安建筑科技大学硕士论文 在c m p r d b m s x m l 中,描述说明表之间实现关联的参照和容器管理字段映射到数 据库中的特定字段。在l :1 中: 丰丰# # 丰丰定义表a 、b 之间的关联参照,主要是定义外键情况# # 丰丰# # # # 料 a - b ah a sb i d i d 丰丰料料料料丰料料木料木a 表的映射描述木料料料料料料料木料料料丰丰 同上面定义 料丰料料幸料料料木料木糨表的映射描述料料料木料料料料木料料料丰木 同上面定义 上面定义说明a 、b 表之间关联映射描述及其各自的字段描述。 1 :m 中,要定义分别定义两个对应关系中的外键。 # 丰丰 料料木丰# 定义表ah a sb s ,主要是定义外键情况料 丰术# 丰丰丰丰料# 丰 a - b a ah a sb s i d l d # 料# 丰丰丰丰# 定义表b sb e l o n g st oa ,主要是定义外键情况 # # 丰丰# # 丰丰丰丰料# a - b 第1 2 页 西安建筑科技大学硕士论文 b sb e l o n g st oa a i d h i d ( c 0 1 1 瑚皿a p ( r e l a t i o n s h i p r o l e m a p 丰木料料料料料料料丰丰丰a 表的映射描述料料木料料料料料料丰料幸丰料 同上面定义 料料 丰料 料 # 芈丰料b 表的映射描述料 # 丰丰料料# 丰丰料 # # 同上面定义 m :n 中,跟一对多很类似,就是要描述清楚两个表之间关联的参照关系。 丰料 木术 丰木料 定义表ah a sb s ,主要是定义外键情况料 木术丰丰 料 # # # a b a ah a sb s b l d b i i x k e y c o l u m 丰丰丰木 丰半# 丰丰 # 丰卓定义表b sh a sa s ,主要是定义外键情况料料# # # # # 料# 木丰 h - b b sh a sa s ( r e l a t i o n s h i d r o l e - m a p a l d a i d 第1 3 页 西安建筑科技大学硕士论文 料丰料丰术木料木料料料丰丰a 表的映射描述料木料料木料料料丰料料料料丰 同上面定义 料料木木木料丰 术料料料牝表的映射描述料料料卡车料料料丰料料料丰料 同上面定义 2 2 3d o 的应用 j d o 也是一种解决对象化数据保存的方案。j d o 的目的就是在尽可能少的限 制条件下,允许j a v a 应用程序把任何用户定义的j a v a 类实例透明地保存在数据 库中,并且依然可以从数据库中把该实例检索出来。j d o 与执行方法的位置无关, 它不以r m i 和e j b 的方式提供远程调用方式,也不在数据库存储和执行方法。而 只是简单地指出在内存中应该如何处理持久层对象字段,如何在底层数据库中透 明地存贮和检索数据。 j d o 实例和应用程序是在同一个j v m 中运行的。应用程序委托j d o 实现检索 需要的持久对象字段。j d o 实现会跟踪字段修改、在事务中结束这些修改再次存 放到数据库中。3 d o 实现负责实现数据对象属性与底层数据库表字段之间的映 射。 下面是的m a p p i n g x m l 文件说明了j d o 实现数据库到j a v a 对象的映射机制。 e m p l o y e ed e f i n i t i o n m a p t ot a b l e = e s s po r ge m p l o y e e _ t 。n c a c h e t y p et y p e = “n o n e n f i e l dn a m e = ”i d ”t y p e = ”i n t e g e r ”、 s q ln a m e = 。d e s c r i p t i o n “t y p e = ? c h a r “n s q ln a m e = ”r o l ei d ” m a n y t a b l e = e s s po r ge m p l o y e e _ r o l e _ t ” m a n y k e y = ”e m p o y e e i d ” d i r t y = i g n o r e “n 7 m a p p i n g x m l 中定义了所有跟数据库关联的对象。每个对象以 开始, 以 结束。c l a s s 后面的n s t l e 定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理笔试题简答题及答案
- 护理考试题库及答案简答
- 2025年保洁中级试题及答案
- 东南亚跨境电商市场消费者行为与市场细分研究报告
- 导游安全培训课件
- 对比手法诗歌课件
- 中医基础体质题库及答案
- 安全培训盒子尺寸课件
- 电工转正试题及答案
- 寒潮安全培训课件
- 数字化知识培训内容课件
- 养老护理员全套培训课件
- 2025年河南省周口市辅警协警笔试笔试真题(含答案)
- 2025年吉林省机关事业单位工人技术等级考试(理论知识)历年参考题库含答案详解(5卷)
- 四川省成都市2025年中考数学试卷及答案
- 2025-2026学年人教精通版四年级英语上册(全册)教学设计(附目录)
- 计算机应用技术职业发展路径
- 手术部位感染预防与控制标准操作
- 数据退役管理办法
- 徒步小组管理办法
- 2025至2030中国任天堂行业市场深度研究与战略咨询分析报告
评论
0/150
提交评论