




已阅读5页,还剩60页未读, 继续免费阅读
(计算机应用技术专业论文)基于or映射的一卡通数据库持久层的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳理工大学硕士学位论文 摘要 目前,在软件开发领域极其推崇的是面向对象程序设计方法,因为它具有确 保软件质量、可重用性、灵活性、可维护性、可扩展性的技术,所以得到广泛的 应用。而数据库的应用大多数企业开发仍然使用关系数据库,因此,对于面向对 象程序设计和关系数据库的广泛应用,使得对象到关系数据库映射机制的需求越 来越多的应用于各种企业的开发中。本文结合一卡通系统这一实际项目对o r 映 射技术以及数据库持久层技术的设计方法进行了讨论,提出基于o r 映射的数据库 持久层的一般设计思想及其应用实现。 本文首先分析了一卡通系统开发的背景及其意义,接着研究0 r 映射技术以及 o r 映射技术在数据库持久层设计中的对象持久化问题,针对几种持久层的设计方 案的优劣对比来确定采用o r 映射的健壮持久层设计方法。 其次结合一卡通系统的特点,提出了一个基于j a v a 平台的数据库持久层的架 构,并运用广泛使用的开源框架h i b e r n a t e 实现数据库持久层的设计,给出卡 通系统中持久层的应用实现。 最后还介绍了w 曲服务在一卡通系统中的应用;具体的介绍了w e bs e r v i c e s 技术,一卡通平台的体系结构、w e b 服务平台的实现和一卡通客户端管理功能的实 现。在结论中还讨论了h i b e r n a t e 框架的优缺点和在今后的开发过程中应注意的问 题。 关键词:o r 映射;持久层;h i b e r n a t e ;一卡通;w e b 服务 沈阳理工大学硕士学位论文 a b s t r a c t c u r r e n t l y ,o b j e c t o r i e n t e dp r o g r a m m i n gd e s i g nm e t h o di st h em o s tr e s p e c t e di nt h e f i e l do fs o f t w a r ed e v e l o p m e n t ,b e c a u s ei th a st oa i s u r et h es o f t w a r eq u a l i t y ,r e u s a b i l i t y , f l e x i b i l i t y , m a i n t a i n a b i l i t y a n de x t e n s i b i l i t y ,s ot ob eu s e dw i d e l y ,b u td a t a b a s e a p p l i c a t i o ns t i l lu s er e l a t i o n a ld a t a b a s ei nm o s te n t e r p r i s e s t h e r e f o r e ,t h ee x t e n s i v e a p p l i c a t i o no ft h eo b j e c t o r i e n t e dp r o g r a m m i n gd e s i g na n dr e l a t i o n a ld a t a b a s em a d e o b j e c tt or e l a t i o n a ld a t a b a s em a p p i n gm e c h a n i s md e m a n dm o r ea n dm o r ea p p l i e dt ot h e d e v e l o p m e n to fe n t e r p r i s e s t h i sa r t i c l ec o m b i n e de - c a r de x p r e s ss y s t e m - - t h i sa c t u a l p r o j e c th a sc a r r i e do nt h ed i s c u s s i o nt ot h eo rm a p p i n gt e c h n o l o g ya sw e l la st h e d a t a b a s ep e r s i s t e n c el a y e rt e c h n o l o g yd e s i g nm e t h o d ,p r o p o s e sg e n e r a ld e s i g nt h o u g h t a n di t sa p p l i c a t i o nr e a l i z a t i o n b a s e do nt h eo rm a p p i n gd a t a b a s ep e r s i s t e n c el a y e r a tf i r s t ,t h i sa r t i c l eh a s a n a l y z e dt h e e - c a r d e x p r e s ss y s t e md e v e l o p m e n t b a c k g r o u n da n di t ss i g n i f i c a n c e ,n e x ts t u d i e st h eo rm a p p i n gt e c h n o l o g ya sw e l la st h e o rm a p p i n gt e c h n o l o g y so b j e c tp e r s i s t e n c eq u e s t i o ni nt h ed a t a b a s ep e r s i s t e n c el a y e r d e s i g n c o n t r a s ts e v e r a lk i n do fp e r s i s t e n c el a y e rd e s i g nm e t h o d sf i ta n du n f i tq u a l i t y a n dd e t e r m i n e dt ou s eo rm a p p i n g l a y e ro fr o b u s tp e r s i s t e n c el a y e rd e s i g nm e t h o d s s e c o n d l y , c o m b i n e de c a r de x p r e s ss y s t e m sc h a r a c t e r i s t i c 。p r o p o s e d d a t a b a s e p e r s i s t e n c el a y e ro v e r h e a dc o n s t r u c t i o nb a s e d o nt h ej a v ap l a t f o r m , a n du s e s w i d e s p r e a do p e n st h es o u r c ef r a m eh i b e r n a t et or e a l i z et h ed a t a b a s ep e r s i s t e n c el a y e r d e s i g n ,p r o d u c e st h ep e r s i s t e n c el a y e ra p p l i c a t i o nr e a l i z a t i o ni ne - c a r de x p r e s ss y s t e m f i n a l l y ,i ti n t r o d u c e st h ew e bs e r v i c e sa p p l i c a t i o ni ne - c a r de x p r e s ss y s t e m ; s p e c i f i ca b o u tt h ew e bs e r v i c e st e c h n o l o g y ,e - c a r de x p r e s sp l a t f o r ma r c h i t e c t u r e ,w e b s e r v i c e sp l a t f o r m sr e a l i z a t i o na n dt h ee c a r ds y s t e mc l i e n ts i d em a n a g e m e n tf u n c t i o n s r e a l i z a t i o n a l s oi td i s c u s s e dt h eh i b e r n a t ef r a m eg o o da n db a dp o i n t sa sw e l la st h e q u e s t i o ni nt h ec o n c l u s i o nw h i c hw i l lb es u p p o s e dt op a ya t t e n t i o nt oi nt h ef u t u r e d e v e l o p m e n tp r o c e s s i o n k e yw o r d s :o rm a p p i n g ;p e r s i s t e n c el a y e r ;h i b e r n a t e ;e c a r de x p r e s s ;w e bs e r v i c e 沈阳理工大学 硕士学位论文原创性声明 本人郑重声明:本论文的所有工作,是在导师的指导下,由作者本 人独立完成的。有关观点、方法、数据和文献的引用已在文中指出, 并与参考文献相对应。除文中已注明引用的内容外,本论文不包含任 何其他个人或集体已经公开发表的作品成果。对本文的研究做出重要 贡献的个人和集体,均己在文中以明确方式标明。本人完全意识到本 声明的法律结果由本人承担。 作者( 签字) :闽化峰 日期:? * 年7 月3 日 学位论文版权使用授权书 本学位论文作者完全了解沈阳理工大学有关保留、使用学位论文 的规定,即:沈阳理工大学有权保留并向国家有关部门或机构送交学 位论文的复印件和磁盘,允许论文被查阅和借阅。本人授权沈阳理工 大学可以将学位论文的全部或部分内容编入有关数据库进行检索,可 以采用影印、缩印或其它复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:周化唪 日期:渤7 7 1 ; 指导教师签名:i 艺勺 日期:p 一7 7 ; 第1 章绪论 第1 章绪论 1 1 课题研究背景 自计算机应用于管理领域以来,在短短的3 0 多年中,世界发生了深刻的变化: 从m i s ,o a 系统的开发,到当今”信息高速公路”,”信息港”,”政府上网工程”,”电 子商务”系统的建设,信息化的浪潮一浪高过一浪;信息系统建设的三大支柱,即管 理科学,信息技术,系统理论的新成果不断涌现,特别是信息技术,包括信息理论, 计算机科学,网络通信技术的发展日新月异:与此同时,教育行业为了满足社会对 人才的需求,其信息化建设更是方兴未艾,波澜壮阔。 建立先进的信息系统是高校现代化的必由之路,而信息安全技术,智能卡技术 的推广与运用,则是高校信息化程度的重要标志“,。近年来,我国高等学校经历了一 系列的调整和改革,如扩招,院系合并等。因此,高校在组织,协调,监督,指导各部 门的工作中,各类事务越来越复杂,信息量越来越大,涉及的部门越来越多,庞大的 数据信息等待分析,处理和存储,繁琐的事务需要简化和提速,如果仍沿用以前的 手工操作或人工管理的方式,管理部门将很难有时间集中精力处理一些高层次问 题,这无疑不能适应目前的形势需要。 校园一卡通系统在此背景下应运而生。在当前高校信息化建设的进程中,一 卡通系统得到了高度的重视和迅速的推广,成为今后校园信息化建设的重要内容 和必然趋势。 1 2 课题研究意义 一卡通系统服从于数字化校园的整体规划,是数字化校园中有机的、重要的 组成部分,是数字化校园的先行官,将为其他m i s 系统的互连互通打好基础。 一卡通系统的建设将采取银行卡金融功能与校园卡校务管理功能相整合的方 式,由银行与学校分别发行银行卡和校园卡。师生可以在各地的银行网点或自助 终端实现存取款、消费、转账等金融支付;可以代替学生和教职员工在校内的所 有个人证件( 如学生证、工作证、图书证、医疗证等) ,应用于需要身份识别的各 种应用系统;可以通过设在校园卡内的电子钱包实现餐饮、校内购物、上机上网、 医疗等校内消费n ,。 1 沈阳理工大学硕士学位论文 卡通系统的建设,是高校信息化发展的必然趋势,是高校现代化管理韵标 志,这将使学院管理、服务与世界水平相接轨。 一卡通系统的建设,将使原有业务和管理体系相对独立、互不协调的现象得 到有效整合,减少资源浪费和重复建设,达到业务流程重组、提高效率的战略意 图,对于学院能够继续跻身于全国高职高专优秀院校具有特别重要的意义。 一卡通系统的建设,将有效缓解校务管理积后勤服务的繁重业务,提高学校 的管理水平、提高后勤的服务质量,做到减员增效、提高效率,成为广大师生员 工工作、学习和生活中不可或缺的一部分。 一卡通系统的建设,为学校实现财务统一管理提供科学的、现代化的手段, 将加速资金周转的效率,也为银行向学校财务部门和师生员工提供更加及时、周 到的金融服务提供良好的空间“。 1 3 本人在课题中所做的工作 本人的工作包括: 1 研究o r 映射技术和o r 映射的持久层设计方法。 2 针对一卡通系统设计中所采用的面向对象程序设计方法和关系数据库,给出了 一卡通数据库持久层的设计架构。 3 针对一卡通系统,完成数据库持久层设计及实现( 基于j a v a 平台的数据库持 久层设计方案) 。 4 针对一卡通系统,实现w e bs e r v i c e 技术在一卡通中的应用。 1 4 论文的内容和结构 论文的内容是基于o r 映射技术的一卡通系统持久层的设计与实现,主要有 四个方面的内容:o r 映射技术、一卡通系统、数据库持久层的设计以及w e b 服 务在一卡通系统中的应用。 论文共分五章: 第一章提出了课题研究的背景、意义及其论文的内容和结构。 第二章对象关系映射技术的研究。 第三章对象关系映射技术与数据库持久层的设计。 2 第1 章绪论 第四章一卡通数据库持久层的设计与实现。 第五章w 曲服务在一卡通系统中的应用。 最后结论对本文内容进行总结,并对校园一卡通系统提出展望。 第2 章对象关系映射技术的研究 第2 章对象关系映射技术的研究 目前,在企业应用程序开发中,一方面,面向对象技术是应用于薪软件系统 开发的最常见的环境。另一方面,关系数据库仍然是许多人都青睐的持久信息存 储方法,因为它易于使用s q l 来创建和访问,适合用于管理数据,并且在较长时 间内这种情况不太会改交。对象模型基于软件工程的一些原理,例如抽象、封装、 继承、聚合和多态,而关系数据模型则基于数学原理,特别是集合论的原理“1 。两 种不同的理论基础导致各自有不同的优缺点。而且,对象模型侧重于从包含数据 和行为的对象中构建应用程序,而关系数据模型则主要针对数据的存储。对象模 型和关系模型之间的这种失配称为对象关系阻抗不匹配( o b j e c t r e l a t i o n a l i m p e d a n c em i s m a t c h ) 或简称阻抗不匹配m 。当为访问数据寻找一种合适的方法时, 这种不匹配就成为了主要矛盾:使用对象模型,常常通过对象之间的关系来进行 访问;而根据关系理论,则通过表的连接、行列的复制来实施数据的存取。这种 基本的不同使两种机制的结合并不理想。换言之,需要一种映射方法来解决该矛 盾,从而获得成功的设计。 对象关系映射技术在很大程度上缓解了这种矛盾。使用对象关系映 射的应用系统,通常使用面向对象模型实现应用逻辑,而对象的存储和读取完全 由实现对象关系映射的模块完成。实现对象关系映射的模块模拟面向对 象数据库提供的功能,在关系数据库中操作关系和元组,实现对象的存储和读取。 下面讨论这种映射的实现。 2 1 对象一关系映射的概念 对象关系映射m ( o b j e c tr e l a t i o n a lm a p p i n g ,简称o r m ) 是一种为了解决面 向对象与关系数据库存在的互不匹配的现象的技术。简单的说,o r m 是通过使用 描述对象和数据库之间映射的元数据,将j a v a 程序中的对象自动持久化到关系数 据库中。本质上就是将数据从一种形式转换到另外一种形式。这也同时暗示着额 外的执行开销;然而,如果o r m 作为一种中间件实现,则会有很多机会做优化, 而这些在手写的持久层并不存在。 o r m 解决的主要问题就是对象一关系的映射。域模型和关系模型都分别建立在 5 沈阳理工大学硕士学位论文 概念模型的基础上。域模型是面向对象的,而关系数据模型是面向关系的,一般 情况下,一个持久化类和一个表对应,类的每个实例对应表中一条记录。表2 1 列举了面向对象概念和面向关系概念之间的基本映射。 表2 1 对象一关系基本映射”1 面向对象概念面向关系概念 类表 对象表的列( 字段) 属性表的行( 记录) 2 2 对象的映射 每个特定的类的所有对象具有相同的属性定义,但是属性的值可能不同,这 样就可以抽象出一个关系模式,这个关系模式描述所有对象相同的属性定义,相 应的关系实例( 表) 就可以存储这些对象。一个对象映射为关系实例中的一个元组 ( 行) ,而关系实例映射为属于这个类的所有对象的集合,对象的一个属性映射到 关系实例的属性( 列) 上。按照此约定映射后存储对象实例的表为对象表。 属性类型映射成域 属性映射成列 类映射成表( 在关系数据库中实现继承) ( 1 ) 属性类型映射成域 类对象中的属性类型映射成数据库中的域。 域的使用提高了设计的一致性,且优化了应用的移植性。简单的域是非常容 易实现的,仅仅需要替换相对应的数据类型和数据的尺寸。同时,对于使用域的 属性,可能要求为域的约束加入s q l 的c h e c k 串。例如,限定域的取值范围等。 ( 2 ) 属性映射成字段 类的属性映射至关系数据库中0 个或多个字段。 类中的属性有些是非持久性的,不需要映射到数据库中的某个字段。例如, 发票类中的合计属性可能是用于计算而不需保存在数据库表中。而有些类的属性 本身就是某个对象,这时类的属性映射成数据库表中的多个字段。如帐户( a c c o u n t ) 中的c a r d 属性( c a r d 本身映射为数据库表) 。 第2 章对象关系映射技术的研究 ( 3 ) 类映射成表 类直接或者间接的映射成表。 类是一种数据结构,是属于此类的所有对象的集合,除非是非常简单的应用, 类与表之间才会存在一一对应的关系。 2 3 关系的映射 0 r 映射技术不仅涉及对象需要被映射至数据库,而且对象之闷的关系也需要 映射至数据库。对象之间的关系可分为:关联、继承、聚集、组合。下面具体介 绍关联关系和继承关系的映射。 2 3 1 关联关系的映射 关系数据库中,只存在外键参照关系,而且总是由“m a n y ”方参照“o n e ”方, 在数据库的表中“m a n y ”方的表要设置“o n e ”方的主键作为外键,因为这样才能 消除数据冗余。外键允许将表中的某一行与其它表中的行相关联。实现一对一、 一对多和多对多关联关系,仅仅需要在表中加入另一个表的主键作为外键。 ( 1 ) l 对多的情况 将外键放置在“多”的一方。外键的空非空由对1 的强制性决定。1 对多的 情况在实际应用中很常见,在编写持久化类( 实体类) 文件时,对出现下三种情 况的相应处理方法。 磐j 锣。曦糍;+ i 每;: i 疆+ 鼍翱渗羲毛嚣: 一 睡户代码 p k世 p k i l f k l账户代码 账户姓名 卡类型 用户部门 卡状态 证件编号 卡工本赞 账户类别 账户状态 图2 1 数据库表中一对多关系的实现 a c c o u n t c a r d - a c c _ i d :l o n g - c r d _ i d :s t r i n g - a c c _ n a m e :s t r i n g c r d _ s t a t u s :s t r i n g - a c cs t u c o d e :s t r i n g - c a r d s :s e t l 0 一 - c r d _ a c c i d :l o n g 图2 2c a r d 到a c c o u n t 的一对多单向关联 一7 沈阳理工大学硕士学位论文 中。 c a r d a c c o u n t a c _ c _ i d :l o n g - c r d l i d :s t r i n g 。a c c _ n a m e :s t r i n g c r d _ s t a t u s :s t r i n g - c r da c c i d :l o n g - a c c _ s t u c o d e :s t r i n g lo + - a c c o u n t :a c c o u n t , 图2 3c a r d 到a c c o u n t 的多对一单向关联 a c c o u l l t c a r d a c c _ i d :l o n g- c r d _ i d :s t r i n g - a c c _ n a l t l e :s t r i n g- c t d _ s t a t u s :s t r i n g - a c c _ s m c o d e :s f f i n g - c r da c e i d :l o n g - c a r d s :s e t lo - a c c o u n t :a c c o u n t 图2 4c a r d 到a c c o u n t 的一对多双向关联 ( 2 ) 1 对l 的情况 相当于1 对多情况的特例,但又有些差别,分为以下两种情况简要讨论: 可选的1 对强制的1 将外键放置在可选的一端,该外键不能为空值。如图2 5 ,将外键放置在b 表 。i ! 参寮凌? 麓 一:;+ :2 蘸誓i p kl “d p k u 吐 i a _ a t t r i b u t e s 1 o 1ba t t d b u t e s f k lai d 图2 5 可选t 对强制1 关系的实现 其它i 对1 的情况 外键可放置在任意一边,具体情况依赖于性能等因素。如图2 6 ,注意对于1 对l 的情况,不要在两个表中均放置对方的主键。这样,增加了冗余,而且并不 会提高性能。对于强制性,一般在商业规则的对应层实现,而不在p e r s i s t e n c e l a y e r 中实现。 第2 章对象关系映射技术的研究 图2 6 类a 到类b 的1 对1 关系 ( 3 ) 多对多的情况 实现多对多关系,需要引入关联表的概念。在图2 7 中,o b j e c t a 和o b j e c t b 之间存在多对多的关系,并且显示了如何在关系数据库中实现多对多的关系m 。 c h 鹞ac l a s s b - x x _ i d :l o n g- x x _ i d :l o n g b :s e ta :s e t o 事o 图2 7 类a 到类b 的多对多关系 i i 囊i 蠢篱露?i 鞲麓! i 耪o i 褡i 醚,i i i 豢 p k , f k l丑一i d p ki u 堕p k业 p k ,f k 2k 盟 am o t h o d l bm o t h o d 图2 8 数据库表中多对多关系 传统实现中,关联表的属性包含关系中两个表的主键,并且关联表的主键往 往是它们的组合。另一种实现方法是将关联表视为普通表,使用自身的主键o i d , 然后加入实现关系所必需的外键。该方法的好处在于p e r s i s t e n c el a y e r 中,所 有的表具有相同的形式,简化了实现;提高了运行时效率;另外,因为一些数据 库在连接具有复合外键的表时,性能较差。 2 3 2 继承关系的映射 类之间的继承是面向对象程序设计的特征之一,在关系数据库中,实现继承 的一个关键问题是表主键的唯一性策略的选取。适当的方案能优化继承、组合及 对象之间关系的实现。进一步的讨论参见下小节对象标识符( 0 i d ) 。 关系数据库中实现继承的方法可分为三类,各有优缺点,没有一种是完美的, 具体如下: 沈阳理工大学硕士学位论文 将整个类层次( 一棵继承树) 映射为单个数据库表。 类层次的所有类映射为单个的数据库表,表中保存所有类( 基类、子类) 的 属性。 优点: 实现简单,支持多态,因为表中包含了所有信息,所以报表实现简单。 缺点: 增加类层次中的耦合,类层次中任何类的属性的增加会导致表的变更;某个 子类属性的修改错误会影响到整个层次结构,而不仅仅是该子类;浪费了大量的 数据库空间,而且可能需要指明具体的角色。 每个具体予类( 每条继承路径) 映射成一张数据库表。 数据库表包括自身的属性和继承的属性,每个具体的子类包含各自的o i d 。抽 象的基类不参与映射。其中,b a s e 不是抽象类,因而也映射成数据库表;而子类 映射为相应的表,它们具有各自的主键。 优点: 报表操作实现简单,因为表中包含了具体子类的所有信息。 缺点: 类的修改会导致相对应的表及其子类所对应表的更改;角色的更改会造成i d 的重新赋值( 因为不同子类的i d 可能重复) ;并且难以在支持多重角色时,保持数 据的完整性。 每个类均映射为数据库表。 为每一个类创建数据库表,表中包含特定于该类的属性和o i d 。 优点: 与面向对象的概念的一致性最好。对多态的支持最好,对于对象所可能的充 当的角色仅需要在相应的表中保存记录;易于修改基类和增加新的类。 缺点: 数据库中存在大量的表,访问敦据的时间较长,对报表的支持较差,除非定 义视图。 2 4 对象标识符 j a v a 语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主 - 1 0 第2 章对象关系映射技术的研究 主键值来识别或区分同一个表的不同记录。h i b e r n a t e 使用对象标识符( o i d ) 来 建立内存的对象和数据库表中记录的对应关系,对象o l d 和数据库表的主键对应。 为了保证o i d 的惟一性和不变性,应该让h i b e r n a t e ,而不是应用程序来为o i d 赋 值。 2 4 10 l d 的特点 ( 1 ) 0 i d ( o b j e c ti d e n t i f i e r ) m ,不应具有商业意义 0 i d 在任何情况下,都不应包含商业内涵。存在商业意义的任何列都有潜在变 化的可能。而在关系数据库中,采用有意义的主键是致命的错误。如果用户决定 改变字段的商业含义,则需要在所有使用到该信息的地方进行修改。 ( 2 ) o i d 的唯一性 在分配o i d 时,需要考虑两个主要的问题:o i d 唯一性的级别和如何计算它们。 o i d 唯一性具有三种级别:具体类中对象标识唯一;类层次中对象标识唯一;所有 类的对象标识均唯一。为了避免o i d 的重新分配问题,至少需要类层次中标识的 唯一性,而所有类中对象标识的唯一性可以彻底地解决该问题。 2 4 20 i d 的赋值 o i d 是关系数据库中的主键( 通常是代理主键) 在j a v a 对象模型中的等价物。 在运行时,h i b e r n a t e 根据o l d 来维持j a v a 对象和数据库表中记录的对应关系。与 代理主键对应,o i d 也是整数类型,h i b e r n a t e 允许在持久化类中把o i d 定义为 s h o r t 、i n t 、l o n g 为了保证持久化对象的o i d 的唯一性和不变性,通常由h i b e r n a t e 或底层数据库来给o i d 赋值。h i b e r n a t e 提供了标识符生成器接口, o r g h i b e r n a t e i d i d e n t i f i e r g e n e r a t o r 接口,并且提供了多种内置的实现。如 o r g h i b e r n a t e i d i d e n t i t y g e n e r a t o r 和o r g h i b e r n a t e i d i n c r e m e n t g e n e r a t o r ,它们缩写 分别为”i d e n t i t y ”和”i n c r e m e n t ”。在设置 子元素的c l a s s 属性时可以设置。 如下例: g e n e r a t o rc l a s s = ”i d e n t i t y ”) u i d _ t a b l e n e x t _ h i _ v a l u e _ c o l u r r m 、 沈阳理工大学硕士学位论文 表明所有的生成器都实现i d i d e n t i f i e r g e n e r a t o r 接口。 表2 ,2h i b e r n a t e 提供的内置标识符生成器”1 标识符生成器 描述 1 n c r e m e n t 适用于代理主键。由h i b e r n a t e 自动以递增的方式生成标识符,每次增量 为1 i d e n t i t y 适用于代理主键。由低层数据库生成标识符。前提条件是低层数据库支持 自动增长字段类型 s e q u e n c e适用于代理主键。h i b e r n a t e 根据底层数据库的序列来生成标识符。前提条 件是底层数据库支持序列 h i l o 适用于代理主键。h i b e r n a t e 根据h i g h l o w s 算法来生成标识符。h i b e r n a t e 把特定表的字段作为”h i g h ”值。 n a t l v e 适用于代理主键。根据底层数据库对自动生成标识符的支持能力来选择 i d e n t i t y 、s e q u e n c e 或h 订o u u i d h e x 适用于代理主键。h i b e r n a t e 采用1 2 8 位的u u i d 算法来生成标识符。u u i d 算法能够在网络环境中生成唯一的字符串标识符。 a s s i g n e d适用于自然主键。由j a v a 应用程序负责生成标识符,为了能让j a v a 应用 程序设置o i d ,不能把s e t i d0 方法声明为p r i v a t e 类型。应该尽量避免使 用自然主键 下面解释一下,u u i d 和h i g h l o w 算法: ( 1 ) u u i d u ,算法 许多年前,d i g i t a l 使用了一种称之为u u i d 的算法。它基于哈希计算机以太 网卡的物理标识和当前时间来得到唯一的1 2 8 位键值。面对于无以太网卡的计算 机,则可以通过在线的文件得到标识数字。m i c r o s o f t 具有类似的g u i d 算法来得 到1 2 8 位的字符串。 ( 2 ) h i g h l o w m 算法 替代使用较大整数来获取o i d 的方法:将o i d 分解为两个逻辑组成部分。在 应用程序首次需要创建o i d 时,向数据库的单个字段请求h i g h 值( 或者从某些数 据的内建函数获得) ,对于l o w 值,初始化为0 ,在本次会话随后的请求递增。如 果l o w 值到达了极限,则再次向数据库申请h i g h 值。由于h i g h 值互斥的获得, 进而保证了唯一性。 箜! 兰翌墨! 苤墨堕墅苎查堕堑壅 h i g h l o w 方法的优点,每次会话只需与数据库交互一次,减少了流量,使键 值表的访问不再成为瓶颈。其次,保证了o l d 在所有对象中的唯一性。 2 5 对象关系数据库映射的讨论 ( 1 ) 对象设计和关系数据库是常用实现标准 由于对象关系机制的不匹配,许多面向对象的设计者声称不应使用关系数据 库。但事实是9 9 的开发环境是面向对象的开发方法和关系数据库的持久机制,是 常用的实现标准。 ( 2 ) o d b c 和j d b c 的类是不够的 尽管许多开发环境提供了初级的访问关系数据库的机制,常用的方法包括 m i c r o s o f t 的o d b c 机制( 开放数据库连接) 和j a v a 数据库连接( j d s c ) ,绝大多 数面向对象的开发环境提供了封装这些标准方法之一的类库。这些类库的基本问 题,同它们封装了许多对本地数据库的访问一样,太过于复杂。 ( 3 ) 需要p e r s i s t e n c e 层设计 p e r s i s t e n c e 层封装了对数据库的访问,允许开发者专注于商业领域的问题。 即封装访问数据库的类可为开发者提供足够简单的完备接口。另外,对数据库设 计也提供了封装,使开发者无需了解数据库的私有实现。p e r s i s t e n c e 层彻底地隐 藏了存储机制,隔离了可能的修改。 以上的讨论暗示p e r s i s t e n c e 层需要数据字典提供映射对象所需要的信息。 当商业规则如同以往发生变化时,p e r s i s t e n c e 层的代码应无需改变。另外,如果 数据库更改时,唯一所需要修改的是数据字典中的信息。简单的数据库的改动不 会导致应用代码的变化。 ( 4 ) 硬编码的s q l ( s t r u c t u r e dq u e r yl a n g u a g e ) 语句是很糟糕的主意 在应用程序中使用s q l 代码,使程序与数据库设计耦合在一起,减少了程序 的可维护性和升级能力。 ( 5 ) 必须映射到现存的数据库 尽管现存数据库的设计很少满足面向对象应用的要求,但事实是现存的数据 库始终存在。很少的开发者能够以反映面向对象设计的关系数据库开始,相应的 需要应付现存的数据库。 沈阳理工大学硕士学位论文 ( 6 ) 需要多种实现继承的策略 关系数据库中有三种实现继承的方法,但没有一种能适用于各种情况。要求 p e r s i s t e n c e 层对三种方法都要提供支持,尽管采用为具体类映射表可能是最容易 的一种。 ( 7 ) 表连接速度很慢 常常要求从多个表中获取数据来构造复杂对象或一系列对象。关系理论使用 表连接来得到数据,该方法经常被证实为很慢的,或者对于一个好的应用程序来 说是不可接受的。因此,不要使用连接。替代连接使用遍历部分解决了对象关系 不匹配的问题。 ( 8 ) 避免使用带商业意义的主键 对象关系数据库映射的经验要求主键不应包含商业含义。 ( 9 ) 避免使用合成主键 合成主键提高了运行开销;增加了设计的复杂性;当涉及多个字段时,往往 需要额外的处理。单个字段的、无商业意义的主键是非常好的选择。理想的o i d 在企业级数据库中具有唯一性。 第3 章o r 映射技术与数据库持久层的设计 第3 章o 瓜映射技术与数据库持久层的设计 3 1 对象持久化 与软件相关的持久化“1 是使数据的存活时间超过该数据的进程的存活时间。它 将改变对象的生命周期,在没有持久化机制的系统中,个对象的典型生命周期: 被创建、被使用、被删除。一旦系统中支持持久化,对象的生命周期在被创建和 被使用之后,可以通过持久化机制而延续,持久化就是通过提供保存对象状态并 在以后恢复它的方法来存储和检索该对象的n ”。数据持久化后,可重新获得它;如 果外界进程没有修改它,它将与持久化相同。 持久化分为几种。在编辑代码文件时,文件持久化到硬盘上,以后可以重新 获得并使用它。将文件存储到硬盘上可能是最常见的一种持久化形式。我们所说 的持久化指的是将应用数据存储在关系数据库中。 数据库访问技术只是访问数据库的手段,而数据库访问的模式才是开发中需 要重点关注的内容。架构师应该能够根据不同的应用环境来选择数据访问模式, 以获得易用性、开发成本、执行效率等多方面的最有效果。 3 2 持久层的设计方案 下面我们说说几种数据库持久层的实现方案: ( 1 ) 通过会话b e a n 和实体b e a n 来实现数据的持久化 对于这种实现数据持久化的方法是通过会话b e a n 和实体b e a n 来共同完成的。 对于采用这种方法实现的软件系统得最大缺点是持久层对资源的消耗极大( 主要 是内存) ,通常会导致系统的运行速度缓慢。现在采用这种访问模式的主流框架是 e 3 b ( e n t e r p r i s ej a v a b e a n ) ,所以基于这种缺点采用其开发持久层的设计并不多 见。下面是这种数据持久化的实现方法的示意图。 图3 1 会话b e a n 和实体b e a n 来实现数据的持久化 沈阳理工大学硕士学位论文 ( 2 ) 通过d a o 和j d b c 来实现数据的持久化 在这种数据持久化实现方案中通过d a o ( d a t aa c c e s so b j e c t ,数据访问对象) 来实现数据的持久化操作。在这种实现方法中,d a o 通过j d b c 来完成对数据库的 存取操作,实现了j a v a 对象的持久化操作。但这种方法要求开发人员对j d b c 的 底层信息要非常熟悉,并可以依据不同的需求来完成不同的功能。 在这种方法中,d a o 位于业务类与持久层的中间层,起着承上启下的桥梁作用。 它实现了将业务逻辑与底层数据结构之间的分离。把业务逻辑类的s q l 语句封装 在一个或多个数据类中,体现了所谓持久层的概念。但是,这种持久化方法的缺 陷是随着设计层次的增多,编码量的增加,系统结构得到很大提高,设计和开发 成本也相应增高。不能避免的是繁杂的j d b c 代码还得去编写。 开发者必须手工映射每一个对象模型。另外,在对应用系统和映射定义的支 持、更新和扩展方面,这种方法同样是缺少灵活性。一旦持久化层源码有任何的 变化,就要求对应用系统源码的重新编译和重新配置。 这种数据持久化的实现方法的示意图如下: 图3 2d a o 和j d b c 来实现数据的持久化 ( 3 ) 通过d a o 和o r m 组件来实现数据的持久化操作 在这种数据持久化的是实现方案中,通过d a o 来实现j a v a 对象的持久化操作, 丽o r m 组件则用来实现j a v a 对象与数据库中数据之间的相互转换,同时它还包括 了数据库的连接管理,事务管理以及对象的缓冲管理等功能。 采用o r m 技术就促使我们使用成熟可靠的e n t i t yb e a n 、j d o 、h i b e r n a t e 、 i b a t i s 、a p a c h eo j b 这些第三方框架,有了它们我们可以创建一个健壮持久层n ”, 负责系统中对关系型数据库的访问,并将关系型数据转化为面向对象的数据对象 形式。它用这样一种方式将对象映射到持久化机制中,即:关系框架的简单变化 不会影响面向对象的代码。这种方法优点是应用系统程序员不需要了解关系数据 库的框架内容,事实上,他们甚至不需要知道数据正在被存储到一个关系数据库 中。这种方法允许机构开发大规模的、关键任务的应用系统。它的缺点是对应用 第3 章o r 映射技术与数据库持久层的设计 系统的性能有影响,即使系统构建褥好,这种影响依然存在,只不过会小一点。 下面是这种数据持久化的实现方法的示意图。 图3 3d a o 和o r m 组件来实现数据的持久化 3 3 持久层功能需求 一个持久层封装了使对象持久化的行为k 即从永久存储器中读取、删除对象, 或者向永久存储器中写入对象。持久层需要具备的功能没有明确的规范,一个健 壮的持久层应该支持以下功能: ( 1 ) 多种持久机制 一个持久机制是种可以永久保存对象使其可以在以后被更新、获取和删除 的技术。可能的持久机制包括文本文件、关系数据库、对象一关系数据库、层次数 据库、网络数据库和对象数据库。在本文中,主要讨论集中在针对关系数据库的 持久层方面。 ( 2 ) 对持久机制进行完整的封装 只需要发送s a v e 、d e l e t e 、l o a d 消息给一个对象,就可以保存、删除或者获 取它,持久层完成其它的工作。除了对已知异常的处理,在持久层以外的地方都 不应该包含持久化代码。 ( 3 ) 基于条件的多对象操作 因为一次返回多个对象是很常见的,一个健壮的持久层必须可以支持根据一 定条件同时返回多个对象的情况。对于根据一定条件删除多个对象也同样应该支 持。 ( 4 ) 基于关联的多对象操作 在关系数据库中可以进行关联的删除、获取和保存,这些操作也应该可以针 对对象。一个最好的例子就是一个a c c o u n t 对象拥有多个c a r d 对象实例,在获取、 删除或者保存一个a c c o u n t 对象的时候,应该自动的获取、删除或者保存它的c a r d 对象。 ( 5 ) 事务 沈阳理工大学硕士学位论文 与需求( 3 ) 相关的是支持事务,也就是针对多个对象的一组操作。事务可以是 简单的,一种“要么全部要么没有”的方式,操作必须全部成功或者全部回滚( 取 消) 。或者也可以是嵌套的,在外层的事务失败的时候,嵌套的事务仍然提交而 不回滚。事务可以是短期的,只运行千分之一秒,或者是长期的,花费几小时、 几天、几周甚至几个月。 ( 6 ) 扩展性 可以增加新的类或者属性,并且能容易的变更持久机制,例如从一个厂商的 产品移植到另一个产品,或者是升级。换句话说,持久层必须可以足够灵活以允 许应用程序开发者和持久机制管理员做他们需要做的事。 ( 7 ) 对象标识符 对象标识符( o i d ) 是一个属性,通常是一个编号,用来唯一标识一个对象。 o i d 是关系理论中在一个表中唯一标识一行的列键( k e y ) 的等价物。o i d 可 以通过g u i d 和u u i d 等方法实现。 ( 8 ) 组合键 传统的数据库结构经常使用由两列或多列构成的组合键来唯一标识一行。尽 管这样使数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年证券分析师之发布证券研究报告业务题库及答案
- 2025年试验检测师题库及完整答案网校专用
- 医美咨询目标规划方案
- 南京楼道出新施工方案
- 2025年特种纤维项目立项申请报告模板
- 心理咨询室粉刷方案
- 配餐营销方案
- 手机店圣诞活动方案策划
- 健康咨询情绪管理方案范文
- 咨询服务的响应方案
- 《智慧仓储管理》课程标准
- 火锅店股东协议合同协议
- 财产申报表-被执行人用
- 电梯曳引钢丝绳维护保养制度
- 江苏扬州历年中考语文古诗欣赏试题汇编(2003-2024)
- 沪教版(五四学制)(2024)六年级下册单词表+默写单
- 茶叶加工工(中级)模拟试题与答案
- 高考语文复习【高效课堂精研】打造议论文分论点+课件
- 《SAP培训资料》课件
- 《CT增强扫描碘对比剂外渗预防与护理规范》
- 统编版(2024)七年级上册道德与法治第一单元《少年有梦》测试卷(含答案)
评论
0/150
提交评论