(计算机应用技术专业论文)java持久层设计方法的研究.pdf_第1页
(计算机应用技术专业论文)java持久层设计方法的研究.pdf_第2页
(计算机应用技术专业论文)java持久层设计方法的研究.pdf_第3页
(计算机应用技术专业论文)java持久层设计方法的研究.pdf_第4页
(计算机应用技术专业论文)java持久层设计方法的研究.pdf_第5页
已阅读5页,还剩70页未读 继续免费阅读

(计算机应用技术专业论文)java持久层设计方法的研究.pdf.pdf 免费下载

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

文档简介

摘要 随着计算机技术和网络技术的飞速发展 数据共享成为信息时代的新需求 数据共 享要求数据不但是可访问的 而且必须是可持久的 在使用面向对象的方法对数据进行 展示和处理时 数据和处理流程被封装到对象中 使得对数据的访问和持久化研究上升 为对对象的访问和持久化的研究 目前数据持久化可以采用文件系统 对象数据库以及 关系数据库等多种方式 而关系数据库作为目前发展最成熟的一种持久化机制被应用于 绝大多数的管理系统中 一般而言 基于关系数据库的应用系统通过j d b c 在业务逻辑 层直接操纵数据库 将对对象的操作与对关系数据库的操作混杂在一起 使得系统不利 于维护 通过对j d b c o r m 等当前国内外常用数据持久化方式的分析 提出一个粗粒度持 久层组件 该组件封装了连接池和与业务逻辑无关的常用数据库操作 并提供了对事务 处理 存储过程调用等复杂操作的支持 可单独用于设计持久层 也可结合d a o v o 等j 2 e e 核心模式完成面向对象的持久层设计 将该组件应用于 本科生毕业设计管理 信息系统 持久层的开发 证实其具有操作简洁性及可重用性 同时结合d a o 模式对 本科生毕业设计管理系统的持久层进行改进 证实其还具有灵活性和可扩展性 在相同 条件下 通过设置不同的负载条件执行测试计划 对比该组件与h i b e r n a t e 的执行效率 证实其具有较高的使用价值 关键词 持久层 粗粒度 j d b c o r m d a o a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to fc o m p u t e rt e c h n o l o g ya n dn e t w o r kt e c h n i q u e t h ed a t a s h a r i n gh a sb e e nt h ed e m a n do ft h ei n f o r m a t i o na g e i no r d e rt oi m p l e m e n tt h ed a t as h a r i n g d a t as h o u l dn o to n l yb ea c c e s s i b l e b u ta l s ob ep e r s i s t e n t w h e n a p p l i n go b j e c t o r i e n t e d p r o g r a m m i n gm e t h o df o rp r o c e s s i n ga n ds h o w i n gd a t a d a t aa n di t sp r o c e s s i n gh a sb e e n w r a p p e di n t oal o to fo b j e c t s ot h es t u d yo fd a t ap e r s i s t e n c et u r n e dt ot h eo b j e c t s t h e r ea r e m a n yw a y st op e r s i s td a t ai nr e c e n ty e a r s s u c ha sf i l es y s t e m o b j e c to r i e n t e dd a t a b a s es y s t e m o o d b s r e l a t i o nd a t a b a s em a n a g e m e n ts y s t e m r d b m s e t e b e c a u s et h er d b m si st h e m o s tm a t u r ed a t ap e r s i s t e n tm e c h a n i s m i th a sb e e nu s e di nap l u m p i n gm a j o r i t yo f m a n a g e m e n ti n f o r m a t i o ns y s t e m s g e n e r a l l ys p e a k i n g a p p l i c a t i o n su s i n gt h er d b m sa st h e d a t ap e r s i s t e n c em e c h a n i s mm a n i p u l a t et h er d b m s b yj d b co nt h el o g i cl a y e r i tm a k e st h e m a n i p u l a t i o no ft h eo b j e c ta n dr d b m sm i x e dt o g e t h e r l o w e rt h em a i n t a i n a b i l i t yo ft h e s y s t e m b ya n a l y z i n gf i v ed a t ap e r s i s t e n c em e t h o d sa th o m ea n da b r o a d s u c ha sj d b c o r m a c o a r s e g r a i n e dc o m p o n e n tb a s e dj d b ch a sb e e nd e s i g n e d i tn o to n l yp r o v i d e si n t e r f a c e sf o r r d b m s sc o m m o no p e r a t i o n b u tf e a t u r e ss u c ha st r a n s a c t i o nm a n a g e m e n ta n dc a l l i n gt o s t o r e dp r o c e d u r e s w h i c ha r ei n d e p e n d e n tw i t hb u s i n e s sl o g i c t h ec o m p o n e n tc a nb eu s e d s e p a r a t e l yt od ot h ed a t ap e r s i s t e n c el a y e rd e s i g n o rw i t ht h ej 2 e ec o r em o d e s f o re x a m p l e d a o t om a k et h ep e n s i s t e n c eo b j e c to r i e n t e d i th a sb e e na p p l i e dt od e s i g nt h ed a t a p e r s i s t e n c el a y e ri np r o j e c to f u n d e r g r a d u a t es t u d e n t s t h e s i s e sm a n a g e m e n ts y s t e m t o p r o v et h eu s a b i l i t y c o n c i s i o na n dr e u s a b i l i t yo ft h ec o m p o n e n t t h e ni m p r o v e dt h e p e r s i s t e n c el a y e rb ya p p l i n gd a ot os h o wi t sf l e x i b i l i t ya n de x t e n s i b i l i t y f i n a l l y c o m p a r e d i t sc a p a b i l i t i e sw i t hh i b e r n a t eu n d e rs i r n u l a rc o n d i t i o n so fh a r d w a r ea n ds o f t w a r e p r o v i n g t h a tt h ec o m p o n e n ti sw i t hh i g h l yp r a c t i c a lv a l u e k e yw o r d s p e r s i s t e n c el a y e r c o a r s e g r a i n e d j d b c o r m d a o 论文独创性声明 本人声明 本人所呈交的学位论文是在导师的指导下 独立进行研究工 作所取得的成果 除论文中已经注明引用的内容外 对论文的研究做出重 要贡献的个人和集体 均已在文中以明确方式标明 本论文中不包含任何 未加明确注明的其他个人或集体已经公开发表的成果 本声明的法律责任由本人承担 论吝作者躲靳赴 脾 月二日 论文知识产权权属声明 本人在导师指导下所完成的论文及相关的职务作品 知识产权归属学 校 学校享有以任何方式发表 复制 公开阅览 借阅以及申请专利等权 利 本人离校后发表或使用学位论文或与该论文直接相关的学术论文或成 果时 署名单位仍然为长安大学 保密的论文在解密后应遵守此规定 论文作者签名 导师签名 靳燕 难 钢 d 8 年多月2 日 2 髫年6r9 e l 长安大学硕士学位论文 1 1 研究背景和意义 第一章绪论 随着计算机技术的飞速发展 网络技术的迅猛革新 当今社会己进入了信息时代 原本需要邮寄的纸质报表或者必须亲自到柜台办理的转账业务 现在足不出户通过 i n t e r n e t 可以方便完成 实现以上服务的基础是数据共享 数据共享要求数据不但是可 访问的 而且必须是可持久的 在使用面向对象的方法对数据进行展示和处理时 数据 和处理流程被封装到对象中 使得对数据的访问和持久化研究上升为对对象的访问和持 久化的研究 l l 对象的持久化是指对象的生命周期在被创建和使用后能够通过持久化机 制而延续 可以在下一次系统启动时继续使用 通过持久化的对象可以获得持久的生命 周期 而对象封装的数据经过该操作可以在系统和网络中长期共享 目前 数据持久化可以采用文件系统 对象数据库以及关系数据库等多种方式 文 一 件系统可以满足数据存储的基本需求 但是不能提供对数据排序 累加等分析操作 在 数据插入或删除中不支持事务 不能满足安全性要求 而且不能实现多个线程或程序异 步读写数据 因此文件系统因为不能满足大多数数据持久化的需求而较少使用 对象数据库 o b j e c to r i e n t e dd a t a b a s e 简称o o d b 是采用面向对象概念设计的 新型数据库 与以往的层次 网状以及关系数据模型不同 它能够更好的匹配面向对象 技术 但是从面向对象数据库概念的提出至今仅有二十年时间 它还无法像当前主流的 关系型数据库一样成熟 性能以及标准化是它目前的瓶颈 关系数据库能够透明地处理记录的添加 删除 排序操作 通过主键与字段名随机 访问记录与字段 还可以通过表间关系或表内关系表达对象间的各种约束和关联 就现 阶段而言 关系数据库的理论非常完善 并且得到了数十年的实践考验 无论从性能上 还是数据完备性的角度 关系数据库都有着无可比拟的优势 成为包括面向对象的软件 项目在内的大多数软件系统数据存储的首选 一般而言 基于面向对象技术开发的应用软件系统通常采用三层结构 即表示层 业务逻辑层和数据库层 在三层结构中 业务逻辑层通过j d b c 直接操纵数据库 将对 对象的操作与对关系数据库的操作混杂在一起 使得代码可读性差且不利于维护 而且 j d b c 操纵数据库的代码相当繁琐 每次执行操作前都需设置数据源 驱动 代码重复 量大 对该问题的解决办法是从业务逻辑层中单独分出一个持久层 使其专门处理与数 第一章绪论 据库的交互操作 这样当数据底层修改时 业务逻辑层可以不变或作较小的修改 所谓持久层是指系统中一个相对独立的逻辑层面 或者称为组件 其专注于数据 持久化的实现 并且能够在不同项目中重用 大大简化了数据的增 删 改 查功能的 开发过程 同时又不丧失多层结构的天然优势 对于j a v a 持久层而言 还必须继承延续 j 2 e e 特有的可伸缩性和可扩展性 组件技术为实现某些通用目标定义良好的接口 用 户可根据具体应用对组件进行扩展 将库的可重用性与特定程序的可定制性相结合 是 软件重用方法中最重要的一种 j d b c 为实现关系数据库访问定义了良好的接口 严格 来讲j d b c 也是持久层的组件 但是该组件的粒度过细 一个简单操作涉及多个对象及 其方法 增加了编码难度 因此 设计一个粗粒度的持久层组件 使其在保障信息共享 和数据分布式处理的基础上具有易操作 可移植的特性具有十分重要的现实意义 1 2 国内外研究现状 自从1 9 9 5 年5 月s u nm i c r o s y s t e m s 公司正式公布j a v a 程序设计语言和j a v a 平台以 来 出现大量的使用j a v a 语言编写的程序 其中也包括数据库应用程序 起初由于没有 一个操作数据库的j a v aa p i 编程人员要连接数据库就不得不在j a v a 程序中加入c 语 言的o d b c 由于o d b c 的介入使得诸如平台无关性 面向对象特性等j a v a 的优秀特 性无法充分发挥 1 9 9 7 年2 月1 8 日s u n 公布了j d k l 1 版本 其中的数据库应用程序 开发接口 s q l 包 也就是j d b ca p i 成为j a v a 语言的标准组件 d b c 是一套规范 它规定了访问数据库的统一接口 并为各个数据库厂商提供标 准的接口实现 j d b c 通过在业务方法中直接嵌入s q l 语句实现对数据库的访问 是最 基本的数据库访问方式 随着j a v a 技术的不断发展 1 9 9 8 年它被细分为针对企业网络应用的j 2 e e j a v a2 e n t e r p r i s ee d i t i o n 针对普通p c 应用的j 2 s e j a v a2s t a n d a r de d i t i o n 和针对嵌入 式设备及消费类电器的j 2 m e j a v a2m i c r oe d i t i o n 三个版本 而本文主要研究j 2 e e 平台下的数据持久机制以及持久层的设计方法 在j 2 e e 平台下 不仅可以使用上面提到的j d b c 对对象进行持久化 除此之外它 还提供了四种对象持久化模式 2 j b m p 模式 b e a n m a n a g e dp e r s i s t e n c e c m p 模式 c o n t a i n e r m a n a g e dp e r s i s t e n c e o r m o b j e c tr e l a t i o n a lm a p p i n g 模式和j d o 模 式 j a v ad a t ao b j e c t s 这四种持久化模式都对j d b c 进行了封装 为上层业务提供 了更为强大的接口 2 长安大学硕士学位论文 1 9 9 8 年是j a v a 迅猛发展的 年 在这一年不仅发生了上面提到的j 2 e e j 2 s e 和 j 2 m e 的划分 s u n 公司还于当年发布了j s p s e r v l e t 和e j b e n t e r p r i s ej a v a b e a n s 企业 级的j a v a b e a n s 规范 e j b 规范中定义了实体b e a n 的两种持久化规范 b e a n 管理的持久化 b e a nm a n a g e d p e r s i s t e n c e b m p 和容器管理的持久化 c o n t a i n e rm a n a g e dp e r s i s t e n c e c m p 在 b m p 模式中 开发者必须自己用硬编码s q l 完成b e a n 的持久化 而在c m p 中 b e a n 的持久化是由容器完成的 在实现实体b e a n 时需要完成以下类的开发 主键类 远程 接口类 本地接口类 工厂类 使用c m p 虽然不用学习s q l 却需要学习e j b 规范为 c m p 定义的查询语言e j b q l 作为企业级的j a v a b e a n s s u n 对e j b 的定位除了作为一个包含业务逻辑的可重用 组件外 e j b 更被赋予了诸如 可移植性 安全刀 可伸缩性 交易性 等 特征 s u n 在发布j 2 e e 相关规范和产品时承诺 j 2 e e 将会使开发变得更容易 从而会 显著降低开发成本 但在j 2 e e 发布时 人们发现被认为是j 2 e e 中最有价值的组成部分 e 旧却是如此的复杂 在编写e j b 时需要大量的配置 而且还需要实现一大堆的接 口 e j b 2 x 刚出来的几年 国内许多程序员被e j b 的优点吸引 当他们开始熟悉并使 用e j b 时 却发现并不象他们想象的那么美妙而逐渐对e j b 失去了兴趣 对象关系映射 简称o r m 是随着面向对象的软件开发方法发展而产生的 面 向对象的开发方法是当今企业级应用开发环境中的主流开发方法 关系数据库是企业级 应用环境中永久存放数据的主流数据存储系统 对象和关系数据是业务实体的两种表现 形式 业务实体在内存中表现为对象 在数据库中表现为关系数据 内存中的对象之间 存在关联和继承关系 而在数据库中 关系数据无法直接表达多对多关联和继承关系 因此 对象 关系映射 o r m 系统一般以中间件的形式存在 主要实现程序对象到关系数 据库数据的映射 简单的说 o r m 是通过使用描述对象和数据库之间映射的元数据 将i a v a 程序中的对象自动持久化到关系数据库中 o r m 方式隐藏了数据访问的细节 将对关系数据库的操作封装为对实体对象的操 作 软件开发人员无须掌握s q l 就可以实现数据持久化 o r m 思想一经提出 立刻受 到软件开发人员的欢迎 并且产生了很多优秀的持久层框架 如h i b e m a t e i b a t i s 等 j d o 是对象持久化工作的综合成果 试图提供 个对象持久化的完全版本 j d o 同 时继承于o d m g 对象数据管理小组 标准化对象数据库的一个独立委员会 和对象 关系映射工具提供商 早在1 9 9 9 年 一些经常编写数据库映射层的富有经验的开发人 3 第一章绪论 员就提出了j d o 大纲 他们在长期的面向对象的开发中进行了大量的数据库方面的处 理和对象化包装 终于 多种多样的包装方式引起了很多兼容性方面的问题 于是一些 主要的开发团队联合起来 以s u n 公司为牵头 启动了j d o 规范的制定 如今 虽多 经波折 但j d 0 2 0 规范还是于0 5 年3 月获得j c p j a v ac o m m u n i t yp r o c e s s j a v a 标准 制定组织 执行委员会的通过 目前 相关的j d o 规范实现的产品己出现了十余种 其中 又以诸如k d o o l i d o d j o g e n i e 等产品相对比较成熟 可以考虑投入开发使用 但j d o 毕竟还是一项新技术 从概念上到实际应用上对其掌握的用户还不多 而这些产品在配置 使用上的方便性 易用性还有待大幅度改进 因此 真正用j d o 来开发项目的用户和系统还廖廖无几 通过上述分析 适合构建持久层的数据持久化方式就剩下j d b c 和o r m 两种方式 事实上 这两种方式也是当前系统开发中最常使用的数据持久化方式 1 3 论文研究主要内容 首先分析了当前国内外所使用的j a v a 数据持久化技术的优缺点 将数据持久层的设 计锁定在j d b c 直接访问数据和o r m 映射两种方式上 提出一个基于j d b c 的粗粒度 持久层组件 该组件抽象了数据库操作的通用流程 在提供常用操作的基础上支持存储 过程调用和事务处理机制 可扩展几乎可应对对数据库的所有操作需求 功能完善 可 单独使用也可结合d a o 模式设计面向对象的持久层 使用该组件完成本科生毕业设计管理信息系统的设计与实现 证实其具有可用性 操作简洁性及可重用性 结合j 2 e e 的核心模式d a o 对毕设管理系统的持久层设计进 行改进 d a o 将数据对象和操作过程封装为对象 仅向业务逻辑层提供接口 简化了 业务逻辑的开发 增强了代码的可维护性 在软硬件相同的条件下 使用j m e t e r 对比其 与h i b e r n a t e 的执行效率 通过在不同的负载情况下执行测试计划 证实该组件具有较 高的使用价值 4 长安大学硕士学位论文 2 1 持久层的产生及作用 第二章持久层概述 在采用面向对象的方法进行应用系统设计时 需要把业务领域的需求映射为域模型 d o m a i nm o d e l 域模型通常以类图为主 类图中一些对象的状态需要长时间保存 在 j a v ae e 框架中 把这些对象设计为实体 e n t i t y 这些对象的状态最终要存储到数据 库中 对实体状态进行的改动也要反映到数据库中 实体在面向对象思想中被称为对象 它具有名称 属性 行为等特征 同时与其他 对象之间有着关联 依赖 继承 多态等复杂的联系 而目前主流的数据库系统都是关 系型的 关系数据库的构成有表 索引 视图 触发器 完整性约束等 其中表在关系 数据库中居于核心地位 它体现了关系数据模型并存储着静态数据 表中的行代表一条 记录 列表示记录中所包含的字段 数据库应用的开发人员发现他们正面临着一种阻抗 不匹配的局面 1 8 1 在对象和关系之间的继承关系断开了 持久层框架产生之前 数据持久化通过直接调用j d b c 实现 使用j d b c 执行数据 库操作 每次都必须打开连接 声明数据库服务器地址 数据库名称及登录用户名和密 码 操作执行完闭关连接 大量的重复代码充斥在文件中 每次执行操作前的申请连接 会降低执行效率 编写业务逻辑的程序员必须非常了解数据库表设计 明确各个字段在 数据表中排列的顺序 使得业务逻辑与底层数据库耦合度相当高 一旦数据库发生变化 业务逻辑必须跟着改变 通常数据库的设计不可能一次完成 随着项目开发的深入 对数据库表做小的修改 如增加字段等 都会引起业务逻辑的更改 换句话说 只要d b a 数据库工程师 不 确定数据库版本 业务逻辑就不能停止修改 于是 在经历了反复修改的过程后 在业 务逻辑和数据库层之间插入一层 解耦创3 的思想提出了 在逻辑层和数据底层之间加入功能相对独立的持久层 通过良好的设计将逻辑结构 业务逻辑 与物理结构 系统底层 如数据库 相分离 将对象映射到某种持久机制 中 并且对关系数据库的轻微改动不会影响面向对象的应用 这种开发模式对于大规模 面向对象的商业信息系统的开发非常适用 一个成熟的持久层框架应该满足以下几点要求 1 减少乏味的代码 5 第二章持久层概述 持久层框架封装了数据库持久层的大多数技术细节 如事务管理 数据库连接管理 s q l 生成等 得益于这些成熟优秀的底层实现 程序员可以从j d b c 编码的炼狱中解脱 从而将精力和创造力投入到业务层设计等更有价值的工作中去 2 更加面向对象的设计 目前的持久层框架 大多数都已经建立在面向对象的设计思想之上 o r m o b j e c t r a t i o nm a p p i n g 对象关系映射 几乎是目前主流持久层框架的基本特征 o r m 为系统设计提供了更加自然的实现方式 可以通过o r m 将系统中的d o m m n o b j e c t 自动映射到各个数据库表 从而编码中只需要关系o b j e c t 的相关属性 而无需再 纠缠于j d b cr e s u l t s e t 中毫无意义的字段型数据 3 更好的性能 持久层框架大多提供了优秀的性能优化机制 如内置的数据库连接池支持 p r e p a r e d s t a t e m e n t 缓存 数据缓存等 这些优化机制的综合使用大大提升了系统性能 更重要的是 由于设计上更加全面的考量 这些持久层框架往往有着超豪华的设计团 队 这些机制对于上层构架完全透明 使程序员无需关心其中负责的实现细节即可享 受其所带来的性能提升 4 更好的移植性 基于j a v a 的跨平台特性 使用j a v a 开发的系统可以在不同操作系统之间切换 但 由于数据库之间的差异 系统在数据库平台之间的迁移却遇到了阻力 上面提及的成熟 的持久层框架 由于设计上的良好隔离 从而提供了对不同数据库的良好支持 只需简 单的修改其配置参数 即可实现底层数据库的切换 前提是系统无需使用特定数据库的 独有特性 2 2 持久层的框架 持久层框架是一组软件服务 将应用程序与该程序所使用和操纵的数据源分离 持 久层框架位于数据源之上 提供访问数据源的应用程序接口 目前的持久层框架 大多 数都已经建立在面向对象的设计思想之上 对象关系映射 4 1 在对象模型与关系模型建 以及支持这两种模型的底层机制之间进行转换 6 长安大学硕士学位论文 2 2 1 持久层框架的设计模式 数据持久层框架使用d a t aa c c e s so b e j c t d a o 与v a l u eo b j e c t v o 模式 完全抽 象了访问数据方法的细节 严格区分表示 业务与数据层 v o 模式封装从数据库读取 和发送到数据库的数据 向业务应用程序开发人员隐藏物理表格结构 抽象数据库中的 数据关系 d a o 模式封装了与数据库交互的j d b c 并通过v o 模式与业务层通信 图 2 1 演示了持久层框架在系统结构中的地位 图2 1 持久层框架在系统结构中的地位 通过上图可见 v o 不仅可以向下面的数据访问层传递 还可以向上传递到表示层 向浏览器端显示信息 d a o 模式有两个作用 1 d a o 模式完全抽象用户请求的数据源 d a o 模式的用户不知道数据来自 o r a c l e m ss q ls e r v e r l d a p 服务器还是其他的w e b 服务 数据源时完全 透明的 2 d a o 模式抽象通常与访问数据源相关联的c r u d c r e a t e r e p l a c e u p d a t e 与d e l e t e 逻辑 由于用户不知道如何查询和读取数据 因此改变数据访问 代码时 如d a o 中发出的s q l 语句 不受影响 d a o 模式甚至允许应用程 序从多个数据源读取数据 用一个逻辑对象向用户显示 一个典型的d a o 实现包含下列几个组件 d a o 工厂类 d a o 接口 d a o 接口实 现类和值对象 7 第二章持久层概述 2 2 2o r m 系统的参考模型 o r m 系统的参考模型如图2 2 所示 在该系统中有一个映射信息库 其中存放了对 象与数据库表的映射信息 当业务领域类需要持久化时 持久层就会参照映射信息库 从数据库中读出该类对应的表 执行相应的s q l 代码 如果是查询操作 那么将参照映 射信息库把查询结果集转换成对象 业务领域类与持久层之间传递对象 持久层向关系 数据库传递s q l 语句 关系数据库向持久层传递数据记录 这样业务领域类在存取对 象时 如同在对象数据库中存取一样 图2 2o r m 系统的参考模型 这种方法的好处是应用程序开发者不需要了解数据库模式 事实上 他们甚至不需 要知道对象是保存在关系数据库中 另一方面 当数据库模式发生改变时 它并不影响 面向对象代码 因为持久层会自动跟踪这种改动 通过修改映射信息库中的对应关系 缺点是对应用程序有些性能上的影响 但可以通过采取如缓存 延迟加载等相应技术减 少这方面的影响 2 3 2 对象到关系数据库的映射机制 1 属性映射成列 类属性通常映射成数据库中的零或者多个列 但是并不是每一个类属性都需要持久 化 例如 s t u d e n t 学生 类有一个t o t a l s c o r e 总分 属性 该属性可由各s c o r e 单科分数 属性 计算得到 它并不需要保存到数据库中 因此无需对它进行映射 将属性映射成列时 最常见的情况是将一个类属性映射为数据库表中的一列 当类 属性和数据表列的类型都是简单类型时 如日期类型或者字符串类型 那么直接进行一 对一映射即可 但是当需要映射的类属性的类型不是简单类型或者是关系数据库所不支 持的类型时 就不能通过这种映射方式来进行 例如 关系数据库一般不支持j a v a 中的 b o o l e a n 类型 这时就需要将它映射成数据库中的字符类型或者数值类型 另外 如果 数据库字段的粒度比对象的属性更细 通常就需要将对象的属性映射到多个表字段 比 如c o u p e 类有一个t e a c h e r 类对象作为属性 这个时候t e a c h e r 就需要映射成为数据库 8 长安大学硕士学位论文 中的几列 在有的情况下也需要将多个属性映射成表中的单一列 例如 代表美国邮政 区号的类可以有3 个数字属性每一个都代表邮政编码中的某一部分 而邮政编码可以在 数据库中以单一的列来进行存储 2 属性类型映射成域 关系数据库的数据类型有限 远少于高级语言的数据类型 难以表现高级语言中丰 富的数据类型和自定义类型 给数据接口程序的编写带来很大的麻烦 为解决这一矛盾 在实现对象关系映射时 需要在对象模型中的类型与关系模型中的类型之间进行转换 3 映射继承到关系数据库中 在关系数据库中实现继承的策略取决于类到表的映射策略 类到表的映射 除了非 常简单的应用外 通常不会有类到表的一对一映射 将类之间的继承关系映射到关系数 据库中有3 种基本策略 整个类层次映射为一张表 该策略把一个完整类层次继承结构映射成一个数据库表 而层次结构中的所有类的 所有属性都存储在这张表中 采用这种策略的优点是性能好 可以很容易的实现 在数 据库中提供了最佳的空间占用 没有任何冗余属性 缺点是对象与数据库之间的耦合程 度比较高 在类层次中增加或者删除一个属性时 就必须对数据库表做相应改动 每个具体的类映射为一张表 在该策略中 每一个具体的类映射到一张表 并将该类的父类的属性加入到同一张 表中 抽象类不需要映射到表 其优点是一次数据库操作就可以完成一个对象的读取 该策略的缺点是类与数据库的耦合程度比较高 增加或删除父类的属性会导致对所有子 类所映射的表的结构的修改 对多态和继承的支持不够好 数据库中的冗余字段比较多 9 每个类映射为一张表 在该映射方式中 不管是具体类还是抽象类 每个类都将映射到一张表 采用这种 策略 必须在存放父类实例的表和存放子类实例的表之间建立具有唯一性的外键约束关 系 在每个表中插入一个识别d 将子类所在表的记录和父类所在表的记录关联起来 这种策略的优点是类与数据库之间的耦合程度比较低 类属性的变动引起的表结构的变 动很小 在关系数据库中最大程度的实现了对多态的支持 空间节约性好 唯一的冗余 就是增加了额外的识别d 来连接不同的继承层次 映射比较直接 容易理解 维护成 本低 该策略的主要缺点是性能比较差 访问类的实例时 需要跨表关联 可能导致频 9 第二章持久层概述 繁访问父类所对应的表 4 映射关系到关系数据库中 数据库中不应该只保存持久对象 还应该保存持久对象之间的关系 对象之间的关 系除了继承 还有关联 聚集和组成 它们之间的区别在于对象之间的绑定程度 对象 间的关系可以分为一对一关系 一对多关系 多对多关系 对于不同类型的关系 采用 的映射策略不同 要实现一对一和一对多关系 只需要将一张表的键包含在另一张表中 即可 要实现多对多的关系 需要关联表的概念 它是一种数据实体 唯一的目标就是 在关系数据库中维护两个或者多个表的关联 一对一关系 这种关系可以通过外键方式实现 在任意一个类所对应的表中加入另一方所对应的 表的主键作为外键 多一对多关系 同样是通过外键方式来实现 在 多 的一方所对应的表中加入 一 的一方所对 应的表的主键作为外键 爹多对多关系 在多对多关系的映射中 需要额外创建一张关联表 在关联表中存放两个关联的表 的主键作为属性 而关联表的主键一般是这两个表的主键的组合 h i b e r n a t e 是一个轻量级的对象持久化框架 h i b e r n a t e 不仅提供类到数据库模式的 映射 并且提供了一种数据查询语言h q l h i b e r n a t eq u e r yl a n g u a g e 这种语言非常 类似s q l 查询语言 所不同的是它将表换成了对象 字段换成了属性 表之间的关联 转换成了对象之间的关系 h i b e r n a t e 已发展得相当成熟 被广泛的用于系统开发中 2 3 本章小结 持久层是从业务逻辑层中独立出的 专门处理数据持久化的逻辑层面 其简化了数 据库操作 提升了编码重用率 持久层框架结合d a o 模式与v o 模式 通过向业务逻 辑层提供接口隐藏了物理表结构 抽象了数据关系 o r m 方式在结合d a o 模式与v o 模式的基础上 增加x m l 文件描述对象 关系映 射细节 完成对象模型和关系模型的匹配 h i b e r n a t e 是最成功的o r m 框架 在当前持 久层的开发中被广泛使用 1 0 长安大学硕士学位论文 第三章基于组件的持久层设计与实现 本章介绍了一个粗粒度持久层组件 该组件封装了j d b c 连接数据库 对数据库的 增 删 改 查操作 支持事务并能够调用存储过程 将该组件用于本科生毕业设计管 理信息系统的设计开发中 证实其便于移植 使用方便 3 1j d b c 概述 j d b c 是j a v ad a t a b a s ec o n n e c t i v i t y j a v a 数据库连接 的缩写 是一种用于执行 s q l 语句的j a v aa p i 它由一组用j a v a 编写的类和接口组成 j d b c 实现了向各种关系 数据库发送s q l 语句的功能 其与j a v a 一样具有跨平台运行的特点 j d b c 的结构见 图3 1 j d b c 是一个细粒度组件提供 低级 接口 它用于直接调用s q l 命令 在这方面 它的功能极佳 并且比其他的数据库连接a p i 易于使用 但同时它也被设计为一种基础 接口 在它之上可以建立高级接口和工具 表3 1 列出了j d b c 的几个主要接e l 5 1 表3 1j d b c 的主要接口 a p i说明 j a v a s q l c o n n e c t i o n 提供动态创建和访问j a v a 数组的静态方法 能够通过 g e t m e t a d a t a 方法获得数据库提供的信息 所支持的s q l 语 法 存储过程和此连接的功能等信息 j a v a s q l d r i v e r每个驱动程序类必须实现的接口 同时 每个数据库驱动程 序都应该提供一个实现d r i v e r 接口的类 j a v a s q l d r i v e r m a n a g e r 管理一组j d b c 驱动程序的基本服务 作为初始化的一部分 此接1 2 1 会尝试加载在 j d b c d r i v e r s 系统属性中引用的驱动 程序类 j a v a s q l p r e p a r e s t a t e m e n t继承s t a t e m e n t 接e l 表示预编译的s q l 语句的对象 s q l 语句被预编译并且存储在p r e p a r e s t a t e m e n t 对象中 然后可 以使此对象高效的多次执行该语句 j a v a s q l r e s u l t s e t 一般指查询返回的数据库结果集 j a v a s q l r e s u l t s e t m e t a d a t a 可用于获取关于r e s u l t s e t 对象中列的类型和属性信息的对 象 j a v a s q l s t a t e m e n t 用于执行静态s q l 语句并返回其所生成的结果的对象 第三章基于组件的持久层设计与实现 应用程序应用程序应用程序 之乡凸之多 j d b ca p i j d b cd r i v e r m a n a g e r 数据库驱动 图3 1 使用j i b c 连接数据库实现业务逻辑结构图 3 1 1j d b c 的主要接口介绍 1 c o n n e c t i o n 接口 c o n n e c t i o n 对象代表与数据库的连接 连接过程包括所执行的s q l 语句和该连接返 回的结果 一个应用程序可与单个数据库有一个或者多个连接 也可与多个数据库有连 接 打开连接与数据库建立连接的标准方法是调用d r i v e r m a n a g e r g e t c o n n e c t i o n 方法 该方法接受含有某个u r l 的字符串 d r i v e r m a n a g e r 类 即所谓的j d b c 管理层 将尝 试找到可与那个u r l 所代表的数据库进行连接的驱动程序 d r i v e r m a n a g e r 类存有已注 册的d r i v e r 类的清单 当调用方法g e t c o r m e c t i o n 时 它检查清单中的每个驱动程序 直到找到可与u r l 中指定的数据库进行连接的驱动程序为止 d r i v e r 的方法c o n n e c t 使 用这个u r l 来建立实际的连接 用户可以通过以下代码显示如何打开一个与位于u r l j d b c o d b c w o m b a t 的数据 库连接 访问数据库用户标识为 s a 口令为 s a ls t r i n gu r l j d b c o d b c w o m b a t i l 竺 竺 型竺翌 里三里堡兰 竺竺皇壁垦曼 堡竺竺 旦 竺 堕 蔓l 2 s t a t e m e n t 接口 s t a t e m e n t 对象用于将s q l 语句发送到数据库中 实际上有三种s t a t e m e n t 对象 它 们都作为在给定连接上执行s q l 语句的包容器 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 继承了 s t a t e m e n t 和c a l l a b l e 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 它们都专用于特定类型 的s q l 语句 s t a t e m e n t 对象用于执行不带参数的简单s q l 语句 p r e p a r e d s t a t e m e n t 对 象用于执行带或不带i n 参数的预编译s q l 语句 c a l l a b l e s t a t e m e n t 对象用于执行对数 1 2 长安大学硕士学位论文 据库存储过程的调用 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 接1 3 添加了处理n 参数的方法 而c a l l a b l e s t a t e m e n t 添加了处理o u t 参数的方法 以下的语句显示了s t a t e m e n t 对象从创建到销毁的全过程 s t a t e m e n ts t r u t c o n c r e a t e s t a t e m e n t 岔j 建s t a t e m e n t 对象 l r e s u l t s e tr s s t m t e x c u t e q u e r y s e l e c t f r o mt e s t s q l 语句被作为参数提供给e x c u t e q u e r yi 查鲨 1 3 p r e p a r e s t a t e m e n t 接1 3 p r e p a r e s t a t e m e n t 接1 3 继承了s t a t e m e n t 但与之略有不同 概括为如下两方面 p r e p a r e s t a t e m e n t 实例包含已编译的s q l 语句 这就是使语句 准备好 包含 于f r e p a r e s a t e m e n t 对象中的s q l 语句可具有一个或多个矾参数 斟参数的值 在s q l 语句创建时未被指定 相反的 该语句为每个 参数保留一个问号 作为占位符 每个问号的值必须在该语句执行之前通过适当的s e t x x x 0 方法来提供 由于p r e p a r e s t a t e m e n t 对象已经预编译过 所以其执行速度要快于 s t a t e m e n t 对象 因此 多次执行s q l 语句经常创建为p r e p a r e s t a t e m e n t 对象 以提高效率 多作为s t a t e m e n t 的子类 p r e p a r e s t a t e m e n t 继承了s t a t e m e n t 的所有功能 另外它 还添加了一整套方法 用于设置发送给数据库以取代矾参数占位符的值 同 时 三种方法e x c u t e e x c u t e q u e r y 和e x c u t e u p d a t e 已被更改已使之不再需要参 数 以下程序显示了使用p r e p a r e s t a t e m e n t 接1 3 向数据库插入1 0 条记录 该程序执行的 效率大大高于使用s t a t e m e n t 接口的执行效率 4 r e s u l t s e t 接口 r e s u l t s e t 包含符合s q l 语句中条件的所有行 并且它通过一套g e t 方法 这些g e t 方法可以访问当前行中的不同列 提供了对这些行中数据的访问 r e s u l t s e t n e x t 方法用 1 3 第三章基于组件的持久层设计与实现 于移动到r e s u l t s e t 中的下一行 使下一行成为当前行 结果集一般是一个表 其中有查询所返回的列表器及相应的值 例如 如果查询为 s e l e c ta b cf r o mt e s t 则结果集为如下形式 abc 1 2 3 4 5 c u

温馨提示

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

评论

0/150

提交评论