(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf_第1页
(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf_第2页
(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf_第3页
(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf_第4页
(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf_第5页
已阅读5页,还剩65页未读 继续免费阅读

(计算机应用技术专业论文)基于net平台orm技术——nhibernate的研究与应用.pdf.pdf 免费下载

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

文档简介

摘要 面向对象的开发方法是当今企业级应用中的主流开发方法,关系数 据库则是永久存放数据的主流数据存储系统。由于面向对象模型和关 系模型之间存在对象一关系不匹配障碍,而且面向对象数据库还不成 熟。因此,研究如何在开发应用中进行对象关系转换,有效地集成面 向对象应用和关系数据库显得格外重要。 o r m 是对象关系映射。它是面向对象设计中一项重要的技术。 n h i b e m a t e 是一个面向n e t 平台的对象关系数据库映射工具。它不仅 仅管理n e t 类到数据库表的映射,还提供操作数据的方法。 本论文首先简单介绍了与课题相关的技术,然后重点阐述了o r 映 射机制和基于n e t 平台的n h j b e m a t e 技术,详细分析和研究了如何利 用该持久化技术开发系统,设计并实现考务管理系统,封装n h i b e r n a t e 为数据持久层并对其性能作了优化,并给出了系统的实现过程。最后作 为全文总结分析了该系统的优点和存在的不足。 关键词:对象持久化n h i b e r n a t e 性能优化 o b j e c t - o r i e n t e dd e v e l o p m e n tm e t h o dh a sb e e nw i d e l yu s e di nt h em o s t e n t c w p l - i s c l e v e la p p l i c a t i o n sw h i l er d b m s i sn o wt h ep r e d o m i n a n ts t o r a g e m e c h a n i s mt op e r s i s td a t a , w h i c hc o u l dl e a dt ot h em i s m a t c hb e t w e c no b j e c t o r i e n t a t i o na n dt h er e l a t i o n a lm o d e li nt h eo t h e rh a n d , t h eo b j e c t - o r i e n t e d d a t a b a s ei sn o tm a t u r e t h e r e f o r e , i ti ss os i g n i f i c a n tt of i n da na p p r o a c ht o l z a n s f e ro b j mm o d e l st or e l a t i o n a lm o d e l sa n di n t e g r a t i o no fo b j e c t o r i e n t a t i o na s p e c t sa n dr e l a t i o n a ld a t a b a s e o r mm e a n so b j e c t - r e l a t i o nm a p p i n g i ti sa l li m p o r t a n to b j e c t - o r i e n t e d d e s i g nt e c h n i q u e n h b e m a t ei sa l lo b j e c t - r e l a t i o n a lm a p p i n gt o o lf o r n e t e n v i r o n m e n t , w h i c hn o to n l yt a k e sc a r eo ft h em a p p i n g n e rc l a s st ot a b l e so f r e l a t i o n a ld a t a b a s e ,b u ta l s op r o v i d e sm e t h o d st oo p e r a t ed a t a i nt h e p a p e r , i td e s c r i b e ss i m p l yt h et e c h n o l o g y r e l a t e dt ot h e s u b j e c t , a n dt h e nm a i n l yd e s c r i b e so rm a p p i n ga n d n h i b e m a t et e c h n o l o g y b a s e do n n e ta n de x p l a i n sh o wt od e v e l o ps y s t e mw i t ht h et e c h n o l o g y , d e s i g n sa n dd e v e l o p st h ee x a ma d m i n i s t r a t i o ns y s t e m , w h i c hi sas u b s y s t e m o ft h ee d u c a t i o n a la d m i n i s t r a t i o ns y s t e m 1 h ee x a ma d m i n i s t r a t i o ns y s t e m e n c a p s u l a t e s t h en h i b e r n a t ea sd a t a p e r s i s t e n c el a y e r , i m p r o v e s t h e p e r f o r m a n c eo fn i - i i b e r n a t e d e s c r i b e st h e u 鹏o fs y s t e mi m p l e m e n t f i n a l l y , a n a l y s e st h ea d v a n t a g ea n dd i s a d v a n t a g eo ft h es y s t e ma s t h e s u m m a r yo ft h ef u l lp a p e r k e yw o r d s :o b j e c tp e r s i s t e n t n h i b e r n a t e p e r f o r m a n c ei m p r o v e m e n t 长春理工大学硕士学位论文原创性声明 本人郑重声明:所呈交的硕士学位论文,基于n e t 平台o r m 技术- - n h i b e r n a t e 的研究与应用是本人在指 导教师的指导下,独立进行研究工作所取得的成果除文 中已经注明引用的内容外,本论文不包含任何其他个人或 集体已经发表或撰写过的作品成果对本文的研究做出重 要贡献的个人和集体,均已在文中以明确方式标明本人 完全意识到本声明的法律结果由本人承担 作者签名:醢蠡红年! 月丑日 长春理工大学学位论文版权使用授权书 本学位论文作者及指导教师完全了解“长春理工大学 硕士,博士学位论文版权使用规定”,同意长春理工大学 保留并向国家有关部门或机构送交学位论文的复印件和 电子版,允许论文被查阅和借阅本人授权长春理工大学 可以将本学位论文的全部或部分内容编入有关数据库进 行检索,也可采用影印、缩印或扫描等复制手段保存和汇 编学位论文 作者签名: 篮乐驾年月盈日 艚翩铭碳孥心日 第一章绪论 1 1 目的及其意义 对象关系映射( o b j c c t r d a f i o nm a p p i n g ,简称o r m ) ,是随着面 向对象的软件开发方法发展而产生的面向对象的开发方法是当今企业 级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永 久存放数据的主流数据存储系统对象和关系数据是业务实体的两种表 现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。 对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达 多对多关联和继承关系因此,对象一关系映射( o 砌田系统一般以中间 件的形式存在,主要实现程序对象到关系数据库数据的映射。 在开发关系数据库的系统时,可以通过s o l 语句读取及操作关系数 据库数据在n e t 领域,可以通过a d o n e t 编程来访问数据库这种 方式的优点是运行效率高,缺点是在程序代码中嵌入大量s q l 语句,冗 余是不可避免的,开发人员常常发现自己在一次又一次地编写相同的数 据访闯代码,如获得连接、准备语句、循环结果集以及其他一 些a d o n e t 特定元素,使得项目难以维护特别是当涉及到非常多的 关系数据表、需要在多个不同类型的关系数据库系统中使用时,通过在 程序中使用a d o n e t 开发实施起来更加困难。 在开发基于数据处理为主的软件系统时,引入对象一关系映射中间 件是提高开发效率、提升软件产品的可维护、扩展性的现实需要实践 表明,在基于数据处理为主的企业级应程序开发中,通过引入对象关 系映射中间件,可以节省与对象持久化有关的差不多3 5 的编程工作量, 同时提升软件产品可维护性及易扩展性,提升软件产品质量。 因此,在开发企业级应用时,有必要通过引入对象一关系映射中间 件,实现数据库系统的快速开发。也便于减轻以后的维护工作 1 2 研究现状和发展趋势 在j a v a 领域,已经存在很多成熟的o r m 工具。大多数流行的o r m 工 具都可以实现完整的域模型映射,它的目标是将整层的对象和行为映射 到数据库表。当前主流的o r m 中间件产品主要有:h i b e r n a t e ,j d o , e j be n t i t i e s3 ,e a s y d b o 等。 h i b e r n a t e 是一个基于j a v a 的开放源代码的持久化中间件,它对j d b c 做了轻量级封装,不仅提供o r m 映射服务,还提供数据查询和数据缓 存功能,j a v a 开发人员可以方便地通过h i b e r n a t e a p i 来操纵数据库。现 在,越来越多的j a v a 开发人员把h i b e r n a t e 作为企业应用和关系数据库 之间的中间件。 e a s y d b o 是由简易j a v a 框架网开发的一个适合中小型软件数据库开 发的j a v a 数据持久层框架,系统参考h i b e r n a t e 、j d o 等,结合中小项目 软件的开发实际,实现简单的j a v a 对象到关系数据的映射。是一个简易 但不太成熟的对象一关系映射开源中间件。 j a v ad a t a0 b i e c t s ( j d o ) 是s u n 公司制定的描述对象持久化语义 的标准a p l 。严格的说,j d o 并不是对象关系映射接口,因为它支持 把对象持久化到任意一种存储系统中,包括关系数据库、面向对象的数 据库、基于x m l 的数据库,以及其他专有存储系统。由于关系数据库 是目前最流行的存储系统,许多j d o 的实现都包含了对象一关系映射 服务。 但在n e t 领域,还没有很成熟的o r m 工具。获取o r m 工具主要 途径有三个: ( 1 ) 微软提供的o r m 工具 微软在v s n l 玎2 0 0 5 的a l p h a 版中就提供了0 b j e c t s p a c e s ,它是在 a d o n e t 数据层上的一层o r m 框架。但o b j e c t s p a c e s 还未发布。d a a b 是微软e n t e r p r i s el i b a r a r y 中的一个应用程序块,能够帮助我们实现通用 的数据访问。d l i n q 是微软下一代数据库集成查询语言,不支持使用外 部的x m l 配置文件,而是使用a t t r i b u t e 的方式。 ( 2 ) 开放源码的免费o r m 虽然n e t 领域的开发源码还远远不及j a v a 领域,但是已经有好多 人把j a v a 领域中的最优秀的开发源码转移到n e t 平台上来。这其中包 括做单元测试的n u n i t ,傲日志的l 0 9 4 n e t ,做a o p 的s p r i n g n e t ,以 及我将要研究的o r m 框架的n l - i i b e r n a t e 是基于n e t 的针对关系型数据 库的对象持久化类库,来源于非常优秀的基于j a v a 的h i b e r n a t e 关系型 持久化工具,但其没完善。还有n b e a r 、c a s t l ea c t i v e r e c o r d 、i b a t i s n e t 等。n b e a r 的核心包括一个泛型、强类型的o r m 数据持久化接口、一组 2 相关的e n t i t y 相关组件、高性能分布式组件、w e b 组件。其适合开发各 类基于a s p n e t2 0 ,对性能要求较高的w e b 程序,基于m q 和n e t r e m o t i n g 的高性能分布式组件。a c t i v e r e c o r d 是c a s t l e 中的一个子项目, 现在版本是r c l 。其在底层封装了n h i b e m a t e ,改用a t t r i b u t e 来代替配 置文件。i b a t i s n e t 分为d a t a m a p p e r 和d a t a a c c e s s 两部分,用 d a t a m a p p e r 我们可以自由的使用s q l 语句或者存储过程;d a t a a c c e s s 允许我们通过一个简单的接口来操作数据,而不必了解底层实现的细节。 ( 3 ) 其他公司商业o r m 产品 有一些公司使用d e v e x p r e s s 的x p o 作为o r m 框架进行开发。 彰显着“自由与协作”理念的开源软件大大节省了信息化的开支, 其发展潮流势不可挡。开源的出现与发展,让软件没有垄断的未来日渐 明朗。开源运动经过多年的高速发展,现在已经聚集了相当的力量,开 源的自由和给予理念逐渐深入到了企业的核心技术层面。开源项目和软 件由于其源代码开放,吸取了最广泛的智慧、思想和经验,使其更具生 命力,无论在架构还是在技术上更为合理与有效。所以开源的持久化工 具将是未来的发展方向,在这几种开源的持久化工具中,n h i b e r n a t e 无 疑是最具竞争力的一个,其来自非常优秀的基于j a v a 的h j b e r n a t e 关系 型持久化工具。随着其不断的完善,未来将有很大的发展潜力。 1 3 论文的研究内容与组织结构 本论文讨论了n e t 平台,分析了n e tr e m o t i n g ,较为深刻地论述 了o r m 技术及其重要地位,并基于面向对象的思想,采用六层架构设 计实现了考务管理系统,在持久层采用n h j b e r n a t e ,屏蔽了底层细节, 提高了系统的可移植性和扩展性。针对实际应用,论文改进了n 碰b e r n a t e 的对象检索算法以及数据缓存优化技术,提高了数据查询的性能及效率。 本文的组织结构如下: 第一章介绍了本文的研究背景,相关领域的研究现状和发展趋势, 以及本文的组织结构。 第二章介绍了n e t 平台和分布式对象技术n e tr e m o t i n g 。, 第三章介绍o r m 。 第四章重点分析了n h i b e m a t e 的架构、使用方法。 第五章设计并实现以n h i b e m a t e 为持久层的考务管理系统。 第六章对全文研究的总体结论并对今后的研究工作进行了展望。 3 第二章n e t 平台与分布式对象技术 2 1 n 】时平台 微软公司于2 0 0 0 年7 月在佛罗里达州奥兰多的p r o f e s s i o n a l d e v e l o p e 话c 衄f c r 蛐( p d c ,专业开发人员会议) 上推出了 m i c r o s o f t n e t 的初步方案,它成为了微软平台的软件世界的转折 点n e t 不仅有一套技术规范,它还包括了几个实实在在的产品,例如 编译器、类库、甚至最终的用户程序。 n e tf r a m e w o r k 是一种新的计算平台,它简化了在高度分布式 i n t e r n e t 环境中的应用程序开发。n e t f r a m e w o r k 旨在实现下列目标: 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和 执行,还是在本地执行但在i n t e r n e t 上分布,或者是在远程执行。 ( 1 ) 提供一个将软件部署和版本控制冲突最小化的代码执行环境。 ( 2 ) 提供一个保证代码( 包括由未知的或不完全受信任的第三方创建 的代码) 安全执行的代码执行环境。 ( 3 ) 提供一个可消除本环境或解释环境的性能问题的代码执行环境。 ( 4 ) 使开发人员的经验在面对类型大不相同的应用程序( 如基于 w i n d o w s 的应用程序和基于w e b 的应用程序) 时保持一致 ( 5 ) 按照工业标准生成所有通信,以确保基于n e tf r a m 洲v o r k 的代码 可与任何其他代码集成。 2 1 1 n e t 框架体系结构 n e tf r a m e w o r k i l l 具有两个主要组件:公共语言运行库和n e t f r a m e w o r k 类库1 2 】。公共语言运行库是n e tf r a m e w o r k 的基础如图2 1 所示,您可以将运行库看作一个在执行时管理代码的代理,它提供核心 服务( 如内存管理、线程管理和远程处理) ,而且还强制实旌严格的类型 安全以及可确保安全性和可靠性的其他形式的代码准确性事实上,代 码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代 码,而不以运行库为目标的代码称为非托管代码。n e t f r a m e w o r k 的另 一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合, 可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形 用户界面( g u 0 应用程序,也包基于a s p n e t 所提供的最新创新的应用 4 程序 圈2 1 n e t 框架体系结构 2 1 2 通用语言运行时( c l r ) 通用语言运行时c l r ( c o m m o nl a n g u a g er u n t i m e ) 是n e t f r a m e w o r k 的基础,它处于n e t 框架的最底层,是将底层平台差异进行 抽象的运行期基础设施。它提供内存管理、线程管理和远程处理等核心 服务,并且还强制实施严格的类型安全检查同时,c l r 是n e t 代码执 行的一种机制,它构建在中间语言也之上,源语言在编译后都生成几, 并且它包含执行己编译代码的各种机制。这些机制包括:代码验证和运 行时编译执行技术0 u s t - i n - t i m e ,j r 耽垃圾回收和加强安全策略以及提供 配置调试服务等c l r 支持所有能用公用中间语言( c o m m o ni n t e r m e d i a t e l a n g u a g e ) 表示的编程语言,从而为多种语言提供了一种统一的运行环 境,使得组件和x m lw e b 服务的综合使用不再受编程语言的限制。有 了通用语言运行时,就可以很容易地设计出能够跨语言交互的组件和应 用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的 行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原 始类派生出另一个类或调用原始类的方法还可以将一个类的实例传递 到用不同的语言编写的另一个类中这种跨语言集成之所以成为可能, 是因为基于通用语言运行时的语言编译器和工具使用由通用语言运行时 定义的通用类型系统,而且它们遵循通用语言运行时关于定义类型以及 创建、使用、保持和绑定到类型的规则 5 2 1 3 中间语言h , ( 1 a t e r m e d i a t el a n g u a g e ) 在n e t 框架中执行的所有语言都编译成相同的目标代码,称为中问 语言( i n t e r m e d i a t el a n g u a g e ) i l 是一组可以有效地转换为本机代码且独 立于c p u 的指令。包括用于加载、存储和初始化对象以及对对象调用方 法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常 处理和其他操作的指令在n e t 框架中,通过实时0 r 0 编译器来将儿 转换为特定于c p u 的代码,由于公共语言运行库为它支持的每种计算机 结构都提供了一种或多种j i t 编译器,因此同一组儿可以在所支持的任 何计算机结构上进行j r r 编译和运行 2 1 4a d 0 n e r a d o n e 一3 j 是一种全新的数据访问技术,以a d o 为基础,但只是在 名称上与之真正相关相对于从前的数据访问技术而言,a d o n e t 支持 各种类型的数据存储器,优化了单独的数据提供者,使用于远程数据, 可以处理大量用户同时访闯数据库的应用程序。之所以有这么多的改进, 关键就在于使用了将它同以前技术分开的功能:使用了断开连接的数据, 托管提供者和弛纯。a d o n e t 由一个对象集合组成,其中一些对象是 随着n e tf r a m e w o r k 的推出而最新发布的,而其他一些是从a d o 中发 展过来的它们之间最主要的区别在于现在只用一种方法就可以完成任 务而a d o 却为完成同样的任务提供了几种方法。下面对a d o n e t 主要的对象操作技术做一个分析,来说明它们是如何协作以进行数据操 作的图2 2 给出了使用a d o n e t 时将处理的5 个主要的对象类型。 6 圈2 2 a d o n e t 结构 从数据库开始了解对象,可以知道这些对象是如何协同工作的和它 们所执行的功能 ( 1 )c o n n e c t i o n 对象建立与特定数据源的连接,用户可以指定连接哪 个数据库,使用什么验证等 ( 2 )c o m m o n d 对象对数据源执行命令,对象包含了指定将什么信息 发送到数据源( 或从数据源中检索什么数据或对指定数据执行更 新、删除等操作) 的指令它还包含了将要使用的连接。 ( 3 ) d a t a r e a d e r 对象从数据源中读取只向前进且只读的数据流,对象 获取通过c o m m a n d 对象检索到的信息这一信息是只读的 因此不能被编辑,每次只能读取一条数据该对象提供了处理大 量数据的有效方法在某些情况下,它们被描述为提供了连接的 访问,因为只要使用d a t a r e a d e r ,那么在读取数据的过程中必须 一直保持对数据库的连接。 ( 4 ) d a t a a d a p t e r 对象用数据源填充d a t a s e t ( 或d a t a t a b l e ) 并解析更 新,它是检索数据的另外一种方法它对数据更新的支持也是只 读的即使这样,d a t a a d a p t e r 并不允许编辑数据源:它用数据 的信息副本填充数据集,接着把数据的改变更新到数据源中 回d a t a s e t 对象可以看作是本地常驻内存的小型数据库,实现了一 种非连接的机制以提高数据库连接性能,并利用x m l 管理数据 交换。可以读取、添加、修改和删除其中的数据。这些数据是本 地缓存的,所以它与d a t a r e a d e r 的读取方式不同,可以以随机 的方式读取它在对数据做改变时,通过d a t a a d a p t e r 将它们发 送回数据缓存器中,在这之前,d a t a s e t 都是与数据源断开的。 7 2 2 n e tr e m o t i n g 什么是r e m o t i n 9 1 4 1 ,简而言之,我们可以将其看作是一种分布式处 理方式从微软的产品角度来看,可以说r e m o t i n g 就是d c o m 的一种 升级,它改善了很多功能,并极好的融合到n e t 平台下m i c r o s o f t n e t r e m o f i n g 提供了一种允许对象通过应用程序域与另一对象进行交互的 框架。这也正是我们使用r e m o t i n g 的原因为什么呢? 在w i n d o w s 操 作系统中,是将应用程序分离为单独的进程这个进程形成了应用程序 代码和数据周围的一道边界。如果不采用进程间通信( r p c ) 机制,则 在一个进程中执行的代码就不能访问另一进程这是一种操作系统对应 用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与 另外的应用程序域进行通信,即穿越边界。 在r e m o t i n g 中是通过通道( c h a n n e l ) 来实现两个应用程序域之间 对象的通信的如图2 3 所示: 图2 3r e m o t i n g 进程或应用程序域问对象通信图 首先,客户端通过r e m o t i n g ,访问通道以获得服务端对象,再通过 代理解析为客户端对象这就提供一种可能性,即以服务的方式来发布 服务器对象远程对象代码可以运行在服务器上( 如服务器激活的对象 和客户端激活的对象) ,然后客户端再通过r e m o t i n g 连接服务器,获得 该服务对象并通过序列化在客户端运行。在r e m o t i n g 中,对于要传递的 对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据 包的格式。但必须注意的是,客户端在获取服务器端对象时,并不是获 得实际的服务端对象,而是获得它的引用这既保证了客户端和服务器 端有关对象的松散耦合,同时也优化了通信的性能 8 第三章o r m 概述 3 1 面向对象设计的持久化问题 如今大多数编程语言都是基于面向对象的模型,该模型很好的抽象 了真实世界问题域,对现实数据实现了易于理解的自然描述对于实际 应用中需要处理的数据的存储方式,现在多数是采用关系型数据库但 面向对象的模型遵循的一些软件工程原理如封装、关联、聚合、继承、 多态等与关系数据库遵循的关系数学理论产生的不匹配例使得我们在持 久化对象的过程中遇到了许多困难在面向对象的开发中,数据访问层 最基本的数据操作包括插入对象、删除对象、更新对象和查询对象几 乎所有的系统分析是软件工程的重要阶段,是所有开发的依据。在系统 分析阶段,通过对系统的综合研究,对问题域进行抽象,准确的理解系 统需求和系统内部运行机制,有助于准确地掌握系统的需求,从而正确 地定义问题域,确定软件开发的具体内容。通过系统分析,我们要完成 确定系统需求的内容、确定所有涉及到的要素、为当前需要解决的问题 建立相应的模型等工作,做到充分理解用户对系统的需求 对象模型与关系数据库模型各自理论出发点是不同的:对象模型的理论 体系可以简单归结为两点: ( 1 )以对象看待世界 ( 2 )对象间关系( 继承,关联,聚合,组合) 维系着整体构成。 而关系数据库模型唯一出发点是有效储存数据,主键是数据库的关键技 术,关系在这里只是各个数据表的主键之间的关联,这种关联应该称之 为数据的关联,其表达的意义远远没有对象之间的关联那么深广。因此, 如何在对象和关系数据库之间建立一种满意的映射关系是持久层设计的 关键问题现实的情况是很难做到把关系表记录完整的映射到持久对象 的关系上来,这主要体现在多表的关系无法直接映射到对持久对象的映 射上来,可能是一个表映射多个持久对象,有可能是多个表映射一个持 久对象,更有可能的是表的某些字段映射到一个持久对象,但是另外一 些字段映射到别的持久对象上而且即使这些问题都处理好了,也不能 直接按照对象的方式来对持久对象( p e r s i s t e n to b j e c t ) 编程,因为存在1 : n 关系的持久对象的查询其实就是1 + n 次对数据库的查询,结果是对某 个关联很多其他持久对象的p o 查询速度非常慢,最后不得不整个修改 底层设计,最后等于是完全抛弃了对象设计,完全是按照表字段进行操 9 作。这样做的结果是使程序设计人员非常难受,因为系统的设计是从需 求设计,系统设计这样自顶而下的,结果到了详细设计阶段,却被持久 层映射问题限制,不得不自底向上修改设计方案,又回到了按照过程进 行编程的老路上来,背离了面向对象的程序设计思想。这其实是一个很 经典的问题:对象和关系的映射问题。实际上自从o o p 编程流行以后, 就存在这个难题了,所以才有人提出关系数据库进行重新设计,改用对 象数据库,但实际上关系数据库仍然是存储数据的主要形式,于是就只 能在上层的应用层找解决方案。这就是对o rm a p p i n 9 1 6 1 技术的研究。 3 2o r m a p p i n g 技术 o r 映射,即o b j e c t - r e l a t i o n a lm a p p i n g 7 ,其中o 表示对象,r 表 示关系,几乎所有面向对象设计的应用程序里,都存在对象和关系数据 库。在用户界面层和业务逻辑层中,我们是面向对象的。当对象信息发 生变化的时候,我们需要把对象的信息保存在关系数据库中。这时需要 我们在对象与其在关系数据库对应的表之间作数据转换工作。在我们的 数据访问层中可能会写不少操作数据的代码,用来从数据库保存,删除, 读取对象信息等等。而这些代码写起来总是重复的,实际上这些代码存 在很多近似的通用的模式。我们以a d 0 n e t 中保存对象的方法为例, 假设数据库为m i c r o s o f ts q ls e r v e r2 0 0 0 ,传入一个对象,为s q l c o m m a n d 对象添加s q l p a r a m c t c r ,把所有属性和对象对应,设置s q l c o m m a n d 的 c o m m a n d t e x t 属性为存储过程,然后运行s q l c o m m a n d 。对于每个对象 都要重复的写这些代码,或则不调用存储过程直接在s q l c o m m a n d 的 c o m m a n d t e x t 属性上设置对应操作的s q l 语句。这两种方法都要求我们 熟悉s q l 语句,而且各个类对应的操作都是非常相似的,会有很多重复 性的工作占据我们宝贵的开发时间。如果引入o rm a p p i n g 后,就可以 由o rm a p p i n g 自动生成保存、删除、读取对象的s q l 语句。开发人员 就只需要关注业务逻辑了。 3 3 使用o rm a p p i n g 的优点 ( 1 ) 提高开发效率,降低开发成本。 在实际的开发中,真正对客户有价值的是其独特的业务功能,而现 在的现状是我们花费了大量的时间在编写数据访问的c r u d 方法,包括 后期的b u g 查找,维护等也会花费相当多的时间在数据处理上。这就是 说,我们在实际的开发中很多的时间都被浪费在根本不创造价值的非业 务事件上了。在使用o r m 之后,我们将不需要再浪费太多的时间在数 据访问操作上。o r m 框架已经把数据库转变成了我们熟悉的对象,我们 将只需要了解向对象开发就可以实现数据库应用程序的开发。 ( 2 )简化代码,减少b u g 数量。 通过建立o r m 系统,能够大量减少程序开发代码,实现o r m 后, 开发数据访问层就比较简单,大大减少了出错机会。 ( 3 )提高性能。 同时通过实现c a c h e ,能够对性能进行调优,实现了o r m 隔离了数 据访问层和业务层之间的关系,能够对每一层进行单独跟踪,增加了性 能优化的可能。 ( 4 )隔离数据源。 可以很方便的更改数据库。利用o r m 可以将业务层与数据访问层分 开,开发人员不需要关心对象实际的存储方式,如果需要把s q ls e r v e r 数据库换成o r a c l e 数据库,我们只需要修改配置文件就可以,不必修 改数据访问层。 第四章o r m 技术n h i b e r n a t e 分析与研究 n h i b e r n a t e p j 是基于n e t 的o rm a p p i n g 持久层框架,它从基于 j a v a 的h i b e r n a t e 项目移植而来o rm a p p i n g 就是把对象映射到关系数 据库的记录,简单的说就是能实现把一个对象存储为数据表中的一条记 录和由一条记录创建一个相应的对象,数据表中一行每列的数据就是对 象的属性。使用o rm a p p i n g 时,更多的是从对象的角度来设计程序, 而把数据( 对象的属性) 存储的细节放在后面,完全采用面向对象( 0 0 ) 的方式来设计,从而直观的表达业务概念。 4 1n h i b e r n a t e 体系架构 下图是n h i b e r n a t e 高度抽象的体系结构柳,如图4 1 所示: 图4 1n i - l i b e r n a t e 体系结构( 1 ) 这幅图展示了n h i b e r n a t e 使用数据库和配置文件来为应用程序提供 持久化服务。由于n h i b e r n a t c 比较灵活并且提供了好几种不同的运行方 式,在显示n h i b e r n a t e 运行时体系结构的细节时,考虑两种极端情况: 在轻型体系中,应用程序自己提供a d o n e t 连接,并且自行管理事务, 这种方式使用了n h i b e r n a t e a p i 的一个最小子集;在全面的解决体系中, 对于应用程序来说,所有的底层a d o n e t a p i 都被抽象了,n 1 4 i b e m a t e 会替你照管所有的细节,如图4 2 所示: | 肌暇 o d b c o l ed b , 4 2n h i b e r n a t e 应用接口 4 2 1 核心接口 有五个核心接口几乎在每个n i - i i b e r n a t e 应用中都会用到。使用这些 接口,你可以存储与取出持久对象或者对事务进行控制 s e s s i o n 会话是面向用户的主要接口,代表应用程序和持久层之间的 会话。它封装了一个a d o n e t 连接,也是t r a n s a c t i o n 的工厂。主要用 于对象持久化,数据加载,查询等操作,支持数据库事务,它隐藏了 n h i b e m a t e 内部复杂的实现细节,s c s s i o n 由s e s s i o n f a c t o r y 创建。会话 接口的实例是轻量级的并且创建与销毁的代价也不昂贵。这很重要因为 你的应用可能始终在创建与销毁会话,可能每次请求都是如此。 n h i b e r n a t e 会话并不是线程安全的,因此应该设计为每次只能在一个线 程中使用。n h i b e r n a t e 会话是一个介于连接和事务之间的概念。你可以 简单的认为会话是对于一个单独的工作单元已装载对象的缓存或集合。 n h i b e m a t e 可以检测到这个工作单元中对象的改变。我们有时也将会话 称为持续性管理器,因为它是与持续性有关的操作,例如存储和取出对 象的接口。注意,n h i b e r n a t e 会话与a s p n l 玎的h t t p s e s s i o n 没有任何关 系。 4 2 1 2 s e s s i o n f a c t o r y 接口 应用从s e s s i o n f a c t o r y 会话工厂里获得会话实例。会话工厂是重量 级的! 它可以在多个应用线程之间进行共享。典型的,整个应用只有唯 一的一个会话工厂例如在应用程序初始化时被创建。然而,如果你的 应用使用n h i b e r n a t e 访问多个数据库,你需要对每一个数据库使用一个 会话工厂。会话工厂缓存了生成的s q l 语句和n h i b e m a t e 在运行时使用 的映射元数据。它也保存了在一个工作单元中读入的数据并且可能在以 后的工作单元中被重用,只有类和集合映射指定了这种二级缓存才会如 此。 4 2 1 3 c o n f i g u r a t i o n 接口 c o n f i g u r a t i o n 配置对象用来配置和引导n h i b e m a t e 应用使用一个配 置实例来指定映射文件的位置和n i b c r n a t c 的特定属性,然后创建会话 工厂。工厂创建完成后对只有一种数据库的应用程序来说他的使命到此 就结束了 1 4 t r a n s a c t i o n ( 事务) 接口是一个可选的a p i 。n h i b e r n a t e 应用可以 选择不使用这个接口,而是在它们自己的底层代码中管理事务事务将 应用代码从下层的事务实现抽象出来这可能是一个a d o n e t 事务, 或者一个公共对象请求代理结构( c o r b a 卜一允许应用通过一组一致的 a p i 控制事务的边界。这有助于保持n h i b e r n a t e 应用在不同类型的执行 环境或容器中的可移植性 4 2 1 5 q u e r y 与c r i t e r i a 接口 q u e r y ( 查询) 接口允许你在数据库上执行查询并控制查询如何执 行查询使用h q l 或者本地数据库的s o l 方言编写。查询实例用来绑 定查询参数,限定查询返回的结果数,并且最终执行查询。c r i t e r i a ( 标 准) 接口非常小,它允许你创建和执行面向对象的标准查询为了帮助 应用代码减少冗余,n h i b e r n a t e 在会话接口上提供了一些快捷方法,允 许你可以在一行代码内调用一个查询查询实例是轻量级的并且不能在 创建它的会话外使用 核心接口类图如图4 3 所示: 广= 磊西嚣写 赛饲倔广乏磊甄蚕5 i c o n f i g u r a t i o n 卜一一吲s e s s i o n f a c t o r y i iii i 臬佑 自i酋transactlea 图4 3n h i b e r n a t e 核心接口类图 4 3n h i b e r n a t e 基本应用步骤 在n e t 应用中使用n h i b e m t e 包含以下步骤:唧 - 创建n h b e r n a t e 配置文件 一创建持久化类 一创建对象关系映射文件 一通过n h i b e r n a t ea p i 编写访问数据库的代码。 4 3 1n h i b e r n a t e 配置 n i - w o e m a t e 配置文件主要用于配置数据库连接和n h i b e m a t e 运行时 所需的各种属性。n h i b e r n a t e 同时支持x m l 格式的配置文件和传统的 p r o p e r t i e s 文件配置方式,建议采用x m l 型配置文件x m l 配置文件提 供了更易读的结构和更强的配置能力,可以直接对映射文件加以配置并 由n i - i i b e m a t e 自动加载。而在p r o p e r t i e s 文件中则无法做到这点,必须在 程序中通过编码进行映射文件的加载配置文件名默认为 。n h i b e r n a t e d g x m l ( 或者n h i b e m a t e p r o p e r t i e s ) 。n h i b e r n

温馨提示

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

评论

0/150

提交评论