ImageVerifierCode 换一换
格式:DOC , 页数:34 ,大小:649KB ,
资源ID:6250332      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6250332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用Hibernate和Spring开发数据持久层.doc)为本站会员(wo7103235)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

使用Hibernate和Spring开发数据持久层.doc

1、本科毕业论文(科研训练、毕业设计)题 目:使用 Hibernate 和 Spring 开发数据持久层姓 名:学 院:软件学院专 业:软件工程年 级: 学 号:指导教师(校外) : 职称: 指导教师(校内) : 职称: 年 月 日使用 Hibernate 和 Spring 开发数据持久层1使用 Hibernate 和 Spring 开发数据持久层摘 要 在 现 今 世 界 中 , 数 据 已 经 是 信 息 时 代 中 的 重 心 , 本 系 统 基 于 对 象 /关 系 映射 的 核 心 理 论 , 使 用 Hibernate 持 久 层 技 术 和 Spring 框 架 构 建 数 据 持

2、久 层 , 优 化 数 据库 交 互 , 搭 建 原 型 机 系 统 。 通 过 实 践 证 明 了 Hibernate 的 优 秀 , 以 及 Spring 架 构 的 先进 性 。关 键 词 持 久 层 ORM Hibernate Spring使用 Hibernate 和 Spring 开发数据持久层2ABSTRACT Nowadays, the Data has been the most important thing in this communication epoch. The design is based on Object/Relation Mapping theory,

3、using Hibernate persistent technology and Spring framework to construct a data persistence layer, optimize the database interaction, construct a archetype system. From this design, proving the excellence of Hibernate and the advance of Spring framework.Keyword Persistence Layer ORM Hibernate Spring使

4、用 Hibernate 和 Spring 开发数据持久层3目 录中文摘要Abstract第 一 章 引 言 11.1 课 题 背 景 11.2 设 计 意 图 11.3 设 计 概 述 21.4 论 文 组 织 3第 二 章 基 础 概 念 .42.1 ORM42.1.1 ORM 概 念 42.1.2 ORM 的 好 处 52.2 Hibernate 52.2.1 JDBC 和 Hibernate52.2.2 新 技 术 Hibernate 82.2.3 Hibernate 特 性 .82.3 Spring 框 架 92.3.1 Spring 特 性 .92.3.2 Spring 中 的 IO

5、C .102.4 本 章 小 结 12第 三 章 设 计 方 案 和 实 现 .133.1 设 计 方 案 概 述 .133.2 IDE 开 发 工 具 133.3 构 建 持 久 层 对 象 .153.4 映 射 描 述 183.5 Hibernate 语 义 233.6 整 合 .253.6.1 整 合 配 置 .253.6.2 数 据 访 问 .273.6.3 原 型 机 系 统 293.7 本 章 小 结 31第 四 章 结 论 .32致 谢 语 33参 考 文 献 .34使用 Hibernate 和 Spring 开发数据持久层1第 一 章 引 言1.1 课 题 背 景在 现 今 软

6、 件 世 界 里 , 由 于 功 能 和 数 据 量 的 增 长 , 数 据 库 扮 演 了 越 来 越 重 要 的 作 用 ,可 以 说 基 本 上 任 何 一 个 软 件 都 不 可 能 脱 离 数 据 库 单 独 存 在 。 数 据 库 技 术 的 发 展 , 已经 成 为 先 进 信 息 技 术 的 重 要 组 成 部 分 , 是 现 代 计 算 机 信 息 系 统 和 计 算 机 应 用 系 统 的基 础 和 核 心 。数 据 库 技 术 最 初 产 生 于 20 世 纪 60 年 代 中 期 , 根 据 数 据 模 型 的 发 展 , 可 以 划分 为 三 个 阶 段 : 第 一

7、代 的 网 状 、 层 次 数 据 库 系 统 ; 第 二 代 的 关 系 数 据 库 系 统 ; 第 三代 的 以 面 向 对 象 模 型 为 主 要 特 征 的 数 据 库 系 统 。鉴 于 数 据 库 的 重 要 性 , 对 其 访 问 的 高 效 和 数 据 库 的 稳 定 成 了 当 今 非 常 重 要的 一 个 环 节 , 各 个 不 同 的 系 统 采 取 数 据 库 的 访 问 方 式 很 有 可 能 都 不 一 样 。 面 向 对 象的 开 发 方 法 是 当 今 的 主 流 , 但 是 同 时 我 们 不 得 不 使 用 关 系 型 数 据 库 , 所 以 在 企 业 级应

8、 用 开 发 的 环 境 中 , 对 象 、 关 系 的 映 射 ( ORM) 是 一 种 耗 时 的 工 作 。 大 部 分 企业 应 用 不 得 不 与 他 们 的 后 端 数 据 库 频 繁 交 互 。 为 了 让 这 种 交 互 成 为 可 能 , 并 且 使 得交 互 变 得 有 效 而 迅 捷 , 企 业 应 用 开 发 者 在 应 用 和 底 下 的 数 据 库 之 间 创 建 了 一 个 “持久 层 ” ( persistence layer) 。1.2 设 计 意 图几 乎 所 有 的 应 用 都 需 要 持 续 性 数 据 。 持 续 性 在 应 用 开 发 中 是 一 个

9、 基 本 的 概 念 , 比如 如 果 当 主 机 停 电 时 一 个 信 息 系 统 没 有 保 存 用 户 输 入 的 数 据 , 这 样 的 系 统 几 乎 没 有实 际 的 用 途 。 这 个 数 据 库 负 责 存 储 从 应 用 到 数 据 库 的 数 据 , 也 负 责 数 据 的 检 索 、 更新 和 删 除 。 在 基 于 J2EE 的 企 业 应 用 中 , 组 成 这 个 持 久 层 的 Java 类 既 可 以 映射 对 象 到 数 据 , 也 可 以 映 射 数 据 到 对 象 。Hibernate 是 一 个 开 源 对 象 /与 持 久 性 和 查 询 相 关 的

10、 框 架 。 这 种 新 的 ORM映 射 工 具 , 它 不 仅 提 供 了 从 Java 类 到 数 据 表 之 间 的 映 射 , 也 提 供 了 数 据 查 询 和使用 Hibernate 和 Spring 开发数据持久层2恢 复 机 制 。 相 对 于 使 用 JDBC 和 SQL 来 手 工 操 作 数 据 库 , 使 用Hibernate, 可 以 大 大 减 少 操 作 数 据 库 的 工 作 量 。 Hibernate 是 一 个ODMG3 interface , 只 要 有 Lesser GNU Public License (LGPL)就 可 以 从hibernate.o

11、rg 处 免 费 下 载 。 ODMG3 是 由 对 象 数 据 管 理 小 组 ( ODMG) 开发 的 规 范 , ODMG 是 一 个 由 不 同 的 投 资 商 和 兴 趣 小 组 为 开 发 用 于 对 象 数 据 库 和对 象 相 关 的 映 射 产 品 的 可 移 植 性 规 范 而 结 成 的 联 盟 。 该 规 范 推 动 了 在 不 止 一 个 产 品上 运 行 的 可 移 植 应 用 程 序 的 开 发 。它 既 是 开 源 的 和 免 费 的 , 使 得 用 户 在 需 要 的 时 候 可 以 修 改 源 代 码 , 进 行 功 能 的 定制 , 它 又 是 轻 量 级

12、 封 装 , 避 免 引 入 过 多 的 复 杂 问 题 , 调 试 容 易 , 也 减 轻 程 序 员 的 负担 , 另 外 它 还 具 有 良 好 的 可 扩 展 性 , API 开 放 , 当 本 身 功 能 不 够 的 时 候 , 可 以自 己 进 行 编 码 扩 展 所 需 的 功 能 。1.3 设 计 概 述建 立 一 个 持 久 层 是 简 单 的 , 只 要 在 Java 对 象 和 相 应 的 数 据 库 之 间 存 在 线 性关 系 ( 例 如 : 一 个 对 象 域 映 射 到 相 应 的 数 据 库 表 格 的 某 一 列 ) 。 但 是 这 种 关 系常 常 难 于

13、建 立 , 因 为 对 象 或 者 下 层 的 数 据 库 结 构 复 杂 ( 例 如 , 对 象 具 有 混 合 的 类 型 、集 合 、 和 属 性 ; 数 据 库 表 格 有 外 部 钥 匙 约 束 、 串 联 属 性 ) 。 经 常 , 在 开 发 持 久层 的 时 候 , 后 端 数 据 库 的 属 性 和 它 的 模 式 假 设 永 远 保 持 不 变 。 基 于 这 种 假 设 , 所 有的 持 久 性 操 作 在 应 用 中 是 硬 编 码 的 , 因 此 只 能 绑 定 到 一 种 特 殊 的 数 据 库 模 式 中 。 当后 端 的 数 据 库 模 式 任 何 时 候 发

14、生 改 变 ( 这 在 现 实 生 活 中 经 常 发 生 ) , 这 种 方法 极 耗 时 间 和 精 力 。 数 据 库 模 式 的 改 变 导 致 了 整 个 持 久 层 必 须 重 写 , 应 用 程 序 代 码本 身 也 有 可 能 要 进 行 大 量 的 修 改 。 这 是 一 个 单 调 乏 味 、 非 常 费 时 的 任 务 。本 设 计 采 用 的 是 Spring 的 框 架 配 置 加 上 Hibernate 的 解 决 方 案 , 就 是 由Hibernate 负 责 底 层 的 数 据 持 久 层 , 但 是 不 使 用 Hibernate 自 带 的 配 置 文 件

15、 ,而 是 使 用 Spring 框 架 下 的 配 置 , 让 Spring 框 架 和 Hibernate 进 行 一 个 整 合 ,以 吸 取 二 者 之 长 , 在 效 率 和 简 便 性 上 面 达 到 最 佳 组 合 。使用 Hibernate 和 Spring 开发数据持久层31.4 论 文 组 织本 次 设 计 的 论 文 大 致 分 为 4 个 章 节 :第 一 个 章 节 是 引 言 部 分 , 总 体 介 绍 了 课 题 背 景 , 设 计 意 图 , 设 计 概 述 ;第 二 个 章 节 是 阐 述 概 念 , 本 章 节 对 ORM, Spring 和 Hiberna

16、te 的 概 念 作 了一 个 较 为 详 细 的 介 绍 , 让 未 曾 接 触 过 这 些 方 面 的 读 者 能 有 个 比 较 清 晰 的 认 识 , 再 对现 有 持 久 层 技 术 作 一 个 对 比 , 让 读 者 明 白 为 什 么 会 选 择 Hibernate 而 不 是JDO 或 者 别 的 解 决 方 案 ;第 三 个 章 节 设 计 方 案 和 具 体 实 现 过 程 , 到 这 部 分 实 现 一 个 从 理 论 到 实 践 的 转换 , 在 实 践 的 角 度 上 把 整 个 设 计 过 程 进 行 一 个 较 为 条 理 的 综 合 , 让 读 者 明 白 上

17、文 所述 的 各 项 技 术 如 何 运 用 到 项 目 中 去 ;第 四 个 章 节 是 最 后 的 总 结 语 , 对 上 述 阐 述 进 行 一 个 最 终 的 总 结 , 指 出 还 存 在 的问 题 以 及 努 力 的 方 向 。使用 Hibernate 和 Spring 开发数据持久层4第 二 章 基 础 概 念由 于 本 次 设 计 使 用 到 的 技 术 在 实 际 应 用 领 域 上 还 算 是 比 较 新 颖 , 在 本 章 就 重 点对 设 计 中 使 用 到 的 各 种 技 术 , 以 及 技 术 牵 涉 到 的 概 念 进 行 比 较 全 面 的 介 绍 。2.1 O

18、RM2.1.1 ORM 概 念上 文 提 到 的 ORM 映 射 是 本 设 计 的 核 心 理 论 , ORM 是 Object/Relation Mapping 的 缩 写 , 翻 译 过 来 就 是 对 象 /关 系 映 射 , 字 母 O 起 源 于 “对 象“(Object),而 R 则 来 自 于 “关 系 “(Relational)。 几 乎 所 有 的 程 序 里 面 , 都 存 在 对象 和 关 系 数 据 库 。 在 业 务 逻 辑 层 和 用 户 界 面 层 中 , 我 们 是 面 向 对 象 的 。 当 对 象 信 息发 生 变 化 的 时 候 , 我 们 需 要 把

19、对 象 的 信 息 保 存 在 关 系 数 据 库 中 。当 你 开 发 一 个 应 用 程 序 的 时 候 (不 使 用 O/R Mapping),你 可 能 会 写 不 少 数 据访 问 层 的 代 码 , 用 来 从 数 据 库 保 存 , 删 除 , 读 取 对 象 信 息 , 等 等 。 你 在DAL 中 写 了 很 多 的 方 法 来 读 取 对 象 数 据 , 改 变 状 态 对 象 等 等 任 务 。 而 这 些 代 码 写起 来 总 是 重 复 的 。 如 果 看 看 DAL 代 码 , 你 肯 定 会 看 到 很 多 近 似 的 通 用 的 模 式 。我 们 以 保 存 对

20、 象 的 方 法 为 例 , 你 传 入 一 个 对 象 , 为 SqlCommand 对 象 添 加SqlParameter, 把 所 有 属 性 和 对 象 对 应 , 设 置 SqlCommand 的CommandText 属 性 为 存 储 过 程 , 然 后 运 行 SqlCommand。 对 于 每 个 对 象 都 要重 复 的 写 这 些 代 码 。 除 此 之 外 , 还 有 更 好 的 办 法 就 是 采 用 ORM, 使 用 ORM可 以 大 大 降 低 学 习 和 开 发 成 本 , 现 代 技 术 的 发 展 , 使 得 我 们 不 得 不 不 停 地 学 习 。2.1

21、.2 ORM 的 好 处我 们 不 仅 要 学 习 面 向 对 象 、 UML、 设 计 模 式 等 知 识 , 而 且 还 需 要 学 习 Sql Server、 ADO.NET、 DataSet、 DataReader 等 知 识 。 而 在 实 际 的 开 发 中 , 真使用 Hibernate 和 Spring 开发数据持久层5正 对 客 户 有 价 值 的 是 其 独 特 的 业 务 功 能 , 而 现 在 的 现 状 是 我 们 花 费 了 大 量 的 时间 在 编 写 数 据 访 问 , CRUD 方 法 , 包 括 后 期 的 Bug 查 找 , 维 护 等 也 会 花 费 相

22、当 多 的 时 间 在 数 据 处 理 上 。 这 就 是 说 , 我 们 在 实 际 的 开 发 中 很 多 的 时 间 都 被 浪费 在 根 本 不 创 造 价 值 的 非 业 务 事 件 上 了 。 在 使 用 ORM 之 后 , 我 们 将 不 需 要 再浪 费 太 多 的 时 间 在 ADO.NET 和 Sql 语 句 上 。 ORM 框 架 已 经 把 数 据 库 转 变 成了 我 们 熟 悉 的 对 象 , 我 们 将 只 需 要 了 解 面 向 对 象 开 发 就 可 以 实 现 数 据 库 应 用 程 序 的开 发 。 通 过 建 立 ORM 系 统 , 能 够 大 量 减

23、少 程 序 开 发 代 码 , 实 现 ORM 后 ,开 发 数 据 层 就 比 较 简 单 , 大 大 减 少 了 出 错 机 会 。 同 时 通 过 Cache 的 实 现 , 能够 对 性 能 进 行 调 优 , 实 现 了 ORM 区 隔 了 实 际 数 据 存 储 和 业 务 层 之 间 的 关 系 , 能够 对 每 一 层 进 行 单 独 跟 踪 , 增 加 了 性 能 优 化 的 可 能 。 利 用 ORM 可 以 将 业 务层 与 数 据 存 储 隔 开 , 开 发 人 员 不 需 要 关 系 实 际 存 储 的 方 式 , 如 果 我 们 需 要 把 SQL Server 数

24、 据 库 换 成 ORACLE 数 据 库 , 只 需 要 修 改 配 置 文 件 就 可 , 不 需 要 修 改 程序 。2.2 Hibernate2.2.1 JDBC 和 HibernateJDBC 可 以 说 是 访 问 持 久 数 据 层 最 原 始 、 最 直 接 的 方 法 。 JDBC 是 Java 的开 发 者 Sun 的 Javasoft 公 司 制 定 的 Java 数 据 库 连 接 (Java Data Base Connectivity)技 术 的 简 称 , 是 为 各 种 常 用 数 据 库 提 供 无 缝 联 接 的 技 术 。JDBC 向 应 用 程 序 开

25、发 者 提 供 了 独 立 于 数 据 库 的 统 一 的 API。 这 个 API 提供 了 编 写 的 标 准 和 考 虑 所 有 不 同 应 用 程 序 设 计 的 标 准 。 其 奥 秘 是 一 组 由 驱 动 程 序 实现 的 Java 接 口 。 驱 动 程 序 负 责 标 准 JDBC 调 用 向 支 持 的 数 据 库 所 要 的 具 体 调用 转 变 。 除 了 向 开 发 者 提 供 统 一 的 独 立 于 DBMS 的 框 架 外 , JDBC 还 提 供 了让 开 发 者 保 持 数 据 库 厂 家 提 供 的 特 定 功 能 的 办 法 。 JDBC 驱 动 程 序

26、必 须 支 持ANSI AQL-2 项 目 层 , 但 JDBC 允 许 开 发 者 直 接 将 查 询 字 符 串 传 递 到 连 接 的 驱 动程 序 。 这 些 字 段 可 能 是 ANSI SQL 也 可 能 不 是 , 或 者 根 本 不 是 AQL。 这 些 字符 串 的 使 用 是 基 础 驱 动 程 序 的 事 。 之 前 通 过 Java 访 问 数 据 库 的 唯 一 方 法 就 是使用 Hibernate 和 Spring 开发数据持久层6利 用 Java 中 的 流 调 和 访 问 Common Gateway Interface( CGI, 公 用 网 关 接口 )

27、程 序 。 通 过 Java 调 用 CGI 脚 本 其 实 是 执 行 一 个 访 问 数 据 库 并 返 回 结 果的 独 立 程 序 。 但 是 使 用 这 种 方 法 速 度 很 慢 , 而 且 会 在 应 用 程 序 中 引 入 更 多 的 错 误 。这 是 由 于 利 用 两 种 不 同 的 开 发 语 言 开 发 程 序 , 需 要 掌 握 两 种 不 同 的 技 术 。使 用 JDBC, 用 户 只 要 了 解 Java 语 言 即 可 , 而 使 用 CGI, 用 户 必 须 同 时 使用 Java 和 另 一 种 编 程 语 言 。 使 用 JDBC 的 另 一 个 原 因

28、 是 它 的 速 度 比 CGI 方法 更 快 。 使 用 CGI 方 法 通 常 要 求 计 算 机 执 行 另 一 个 独 立 的 程 序 。 这 个 独 立 的 程 序访 问 数 据 库 , 处 理 数 据 , 并 将 结 果 返 回 给 调 用 程 序 。 这 就 需 要 多 级 处 理 , 因 而 增 加了 等 待 时 间 和 出 错 概 率 。 在 企 业 级 应 用 开 发 中 , 我 们 可 能 使 用 DAO( Data Access Object) 模 式 来 把 数 据 访 问 封 装 起 来 , 然 后 在 其 它 的 层 中 同 一 调 用 。这 种 方 式 的 优

29、点 是 运 行 效 率 最 高 , 但 JDBC+DAO 也 存 在 很 多 的 问 题 , 因为 很 难 做 到 把 关 系 表 记 录 完 整 的 映 射 到 持 久 对 象 的 关 系 上 来 , 这 主 要 体 现 在 多 表 的关 系 无 法 直 接 映 射 到 对 持 久 对 象 的 映 射 上 来 , 可 能 是 一 个 表 映 射 多 个 持 久 对 象 , 有可 能 是 多 个 表 映 射 一 个 持 久 对 象 , 更 有 可 能 的 是 表 的 某 些 字 段 映 射 到 一 个 持 久 对 象 ,但 是 另 外 一 些 字 段 映 射 到 别 的 持 久 对 象 上 。

30、 而 且 即 使 这 些 问 题 都 处 理 好 了 , 也 不 能直 接 按 照 对 象 的 方 式 来 对 持 久 对 象 ( PO) 编 程 , 因 为 存 在 1: N 关 系 的 持 久对 象 的 查 询 其 实 就 是 1+n 次 对 数 据 库 的 SQL, 这 样 将 会 造 成 访 问 的 效 率 极 其 低下 , 最 后 可 能 导 致 不 得 不 整 个 修 改 底 层 设 计 , 最 后 等 于 是 完 全 抛 弃 了 对 象 设 计 , 完全 是 按 照 表 字 段 进 行 操 作 , 又 回 到 了 按 照 过 程 进 行 编 程 的 老 路 上 来 。在 这 种

31、情 况 下 就 需 要 一 个 实 用 的 ORM 工 具 , 现 在 市 面 上 有 几 种 ORM 工具 可 供 选 择 , 比 如 JDO, 但 是 由 于 一 些 原 因 , 诸 如 :1. 不 是 开 源 免 费 的 工 具 , 这 点 在 企 业 开 发 当 中 是 非 常 重 要 的 , 大 家 都 知 道 许 多好 产 品 都 会 商 业 化 , 成 为 商 业 产 品 , 而 很 多 又 是 国 外 的 产 品 , 在 国 内 根 本 就 没 有 销售 和 技 术 的 支 持 。 这 就 决 定 了 某 些 产 品 只 能 研 究 学 习 之 用 , 而 不 能 在 实 际

32、用 途 中 大显 身 手 , 否 则 的 话 , 你 把 软 件 卖 给 客 户 的 时 候 , 你 还 要 告 诉 他 另 外 去 购 买 另 外 一 个别 的 在 国 内 没 有 支 持 的 产 品 , 如 果 那 个 软 件 出 了 什 么 问 题 , 很 遗 憾 , 我 们 没 有 办 法帮 您 解 决 , 我 们 只 能 解 决 我 们 份 内 的 事 情 , 这 样 的 答 复 无 论 如 何 客 户 是 肯 定 没 有 办法 接 受 的 。2. 不 是 轻 量 级 封 装 , 这 点 将 很 明 显 的 影 响 到 日 后 的 调 试 和 维 护 工 作 , 因 为 封 装的 太

33、 多 , 一 旦 出 现 了 错 误 , 你 很 难 定 位 那 个 错 误 是 出 现 在 什 么 地 方 , 封 装 的 越 轻 ,使用 Hibernate 和 Spring 开发数据持久层7越 能 容 易 的 找 到 问 题 的 出 处 , 越 容 易 解 决 。3. 有 些 产 品 的 标 准 很 不 完 善 , 比 如 上 文 提 到 的 JDO, 它 的 JDOQL( 由JDO 自 定 义 的 数 据 库 语 句 , 类 似 SQL 语 句 , 但 并 不 完 全 一 样 ) 不 够 完 善 , 影 射关 系 的 表 达 不 够 强 大 , 另 外 就 是 各 个 标 准 之 间

34、的 产 品 分 裂 , 由 于 JDO1.0 标准 的 缺 陷 , 而 JDO2.0 标 准 还 遥 遥 无 期 , 而 各 个 JDO 厂 商 为 了 能 够 在 竞 争 中脱 颖 而 出 , 那 么 除 了 在 易 操 作 性 和 性 能 上 的 提 高 之 外 , 想 要 吸 引 客 户 , 就 必 须 有 自己 的 产 品 特 色 。 那 么 1.0 标 准 的 缺 陷 正 好 给 了 他 们 发 挥 的 舞 台 , 每 个 厂 商 都 会 有自 己 独 到 的 解 决 方 案 来 解 决 标 准 的 缺 陷 , 然 而 这 却 造 成 了 JDO 产 品 事 实 上的 分 裂 , 可

35、 能 很 多 人 都 会 觉 得 这 样 的 百 花 齐 放 很 不 错 , 但 是 实 际 上 呢 , 你 写 好 的POJO, 用 一 种 JDO 的 Enhancer 进 行 Enhance 过 以 后 得 到 的 PO, 在 另 一个 JDO 产 品 上 跑 不 起 来 。 这 很 像 当 年 Unix 的 分 裂 , 结 果 就 是 二 进 制 代 码 级 的不 兼 容 , 而 只 能 在 C 源 代 码 级 兼 容 。 现 在 的 JDO 也 有 这 样 的 趋 势 , 就 像 服 务器 软 件 的 差 别 一 样 , 一 个 在 Weblogic 上 开 发 好 的 EJB, 移

36、 植 到Websphere, 你 一 定 需 要 重 新 进 行 配 置 。 在 这 样 的 环 境 下 , Hibernate 的 出现 正 好 填 补 了 这 个 空 缺 。2.2.2 新 技 术 Hibernate正 如 上 面 所 说 的 ORM, Hibernate 正 是 基 于 ORM 理 论 的 核 心 框 架 , 使 用Hibernate 你 不 用 每 次 再 去 考 虑 如 何 连 接 数 据 库 , 如 何 用 各 种 SQL 语 句 对 数据 库 进 行 操 作 , 如 何 对 数 据 库 里 面 的 数 据 进 行 同 步 , 这 个 时 候 的 数 据 库 对 于

37、 编 程 人员 来 说 就 是 一 个 对 象 , 你 可 以 对 对 象 作 任 何 你 想 要 的 操 作 , 而 不 需 要 记 住 那 些 繁 琐的 语 句 。Hibernate 帮 助 基 于 普 通 的 Java 对 象 模 型 的 持 久 对 象 的 创 建 , 从 而 允 许 持久 对 象 拥 有 复 杂 的 结 构 如 混 合 类 型 、 集 合 和 属 性 , 还 可 以 拥 有 用 户 自 定 义 的 类 型 。现 在 这 些 持 久 对 象 可 以 有 效 的 反 映 出 底 层 数 据 库 模 式 的 复 杂 结 构 。2.2.3 Hibernate 特 性Hiber

38、nate 依 赖 于 “运 行 期 反 射 ”。 “运 行 期 反 射 ”在 运 行 期 收 集 关 于 对 象 和它 们 相 应 的 数 据 库 映 射 的 信 息 , 这 就 废 除 了 持 久 层 内 对 象 数 据 库 映 射 的 硬 编 码 。 这使用 Hibernate 和 Spring 开发数据持久层8样 , Hibernate 使 得 持 久 层 以 持 久 层 代 码 的 最 小 修 改 就 能 够 适 应 底 层 数 据 库 模式 的 任 何 未 知 变 化 。 反 射 是 核 心 Java 的 一 个 特 征 , 它 促 使 Java 代 码 发 现 关于 所 装 载 的

39、 类 的 域 、 方 法 和 构 造 器 。 反 射 允 许 使 用 反 射 的 域 、 方 法 和 构 造 器 , 在 安全 限 制 内 , 运 行 对 象 上 的 底 层 配 对 物 。Hibernate 自 动 将 持 久 层 扩 展 到 更 大 的 范 围 , 使 用 它 内 建 的 设 备CodeGenerator 和 SchemaExport 就 可 以 完 成 , 从 而 大 大 的 降 低 了 硬 编 码 的故 障 率 。 Hibernate 也 提 供 了 易 于 使 用 的 Hibernate Query Language (HQL),它 是 作 为 “到 SQL 的 最

40、小 化 面 向 对 象 扩 展 ”而 设 计 的 一 种 丰 富 的 查 询 语 言 。HQL 推 动 了 数 据 库 类 型 独 立 查 询 的 编 写 , 数 据 库 类 型 独 立 查 询 在 运 行 期 内 可 以 转换 成 底 层 数 据 库 的 本 地 SQL 方 言 。 该 方 法 保 证 了 底 层 数 据 库 类 型 改 变 时 ( 如 从Oracle 变 为 PostgreSQL ) 代 码 中 查 询 不 受 影 响 。为 了 提 高 效 率 , Hibernate 包 括 了 一 些 策 略 , 如 与 数 据 库 交 互 时 的 多 重 最 优 化 ,包 括 对 象

41、的 缓 存 、 有 效 外 部 连 接 的 获 取 、 必 要 时 SQL 语 句 的 执 行 。Hibernate 的 过 程 开 销 比 JDBC 少 10%。2.3 Spring 框 架2.3.1 Spring 特 性Spring 是 一 个 很 大 的 框 架 , 可 以 说 也 是 一 个 容 器 , 它 的 出 现 让 J2EE 更 容易 使 用 , 也 能 让 开 发 者 培 养 一 种 良 好 的 编 程 规 范 。 SpringFramework 实 际上 是 Expert One-on-One J2EE Design and Development 一 书 中 所 阐 述

42、的 设计 思 想 的 具 体 实 现 。 在 One-on-One 一 书 中 , 作 者 Rod Johnson 倡 导J2EE 实 用 主 义 的 设 计 思 想 , 并 随 书 提 供 了 一 个 初 步 的 开 发 框 架 实 现( interface21 开 发 包 ) 。 而 SpringFramework 正 是 这 一 思 想 的 更 全 面 和 具 体的 体 现 。Rod Johnson 在 interface21 开 发 包 的 基 础 之 上 , 进 行 了 进 一 步 的 改 造 和 扩充 , 使 其 发 展 为 一 个 更 加 开 放 、 清 晰 、 全 面 、 高

43、效 的 开 发 框 架 。 Spring 的 一个 特 性 就 是 能 让 它 框 架 内 的 组 件 看 起 来 更 像 “组 件 ”, 为 什 么 这 么 说 呢 , 首 先 ,使用 Hibernate 和 Spring 开发数据持久层9我 们 的 组 件 并 不 需 要 实 现 框 架 指 定 的 接 口 , 因 此 可 以 轻 松 的 将 组 件 从Spring 中 脱 离 , 甚 至 不 需 要 任 何 修 改 ( 这 在 基 于 EJB 框 架 实 现 的 应 用 中 是 难以 想 象 的 ) 。 其 次 , 组 件 间 的 依 赖 关 系 减 少 , 极 大 改 善 了 代 码

44、的 可 重 用 性 。Spring 的 依 赖 注 入 机 制 , 可 以 在 运 行 期 为 组 件 配 置 所 需 资 源 , 而 无 需 在 编 写 组 件代 码 时 就 加 以 指 定 , 从 而 在 相 当 程 度 上 降 低 了 组 件 之 间 的 耦 合 , 实 现 了 组 件 真 正 意义 上 的 即 插 即 用 。 这 正 是 Spring 最 具 价 值 的 特 性 之 一 。诚 然 , 即 使 没 有 Spring, 实 现 面 向 接 口 的 设 计 也 不 困 难 。 Spring 对 于 面 向接 口 设 计 的 意 义 , 在 于 它 为 面 向 接 口 编 程

45、提 供 了 一 个 更 加 自 然 的 平 台 。 基 于 Spring开 发 , 程 序 员 会 自 然 而 然 倾 向 于 使 用 接 口 来 定 义 不 同 层 次 之 间 的 关 联 关 系 , 这 种 自发 的 倾 向 性 , 来 自 于 Spring 所 提 供 的 简 单 舒 适 的 依 赖 注 入 实 现 。Spring 使 得 接 口 的 定 义 和 使 用 不 再 像 传 统 编 码 过 程 中 那 么 繁 琐 ( 传 统 编 码 过 程中 , 引 入 一 个 接 口 , 往 往 也 意 味 着 同 时 要 引 入 一 个 Factory 类 , 也 许 还 有 一个 额

46、外 的 配 置 文 件 及 其 读 写 代 码 ) 。 这 样 各 个 组 件 的 测 试 也 变 得 更 为 简 单 , 也 能更 简 单 的 在 组 件 中 添 加 模 块 。 站 在 应 用 开 发 的 实 际 角 度 来 说 , 其 最 大 的 优 势 在 于 :Spring 是 一 个 从 实 际 项 目 开 发 经 验 中 抽 取 的 , 可 高 度 重 用 的 应 用 框 架 。Spring 涵 盖 了 应 用 系 统 开 发 所 涉 及 的 大 多 数 技 术 范 畴 , 包 括 MVC、 ORM 以及 Remote Interface 等 , 这 些 技 术 往 往 贯 穿

47、了 大 多 数 应 用 系 统 的 开 发 过 程 。Spring 从 开 发 者 的 角 度 对 这 些 技 术 内 容 进 行 了 进 一 步 的 封 装 和 抽 象 , 使 得 应 用 开发 更 为 简 便 。Spring 并 非 一 个 强 制 性 框 架 , 它 不 仅 提 供 了 很 多 独 立 的 组 件 可 供 选 择 , 还 能 自己 添 加 别 的 组 件 , Spring 能 让 它 们 一 起 工 作 的 很 好 。2.3.2 Spring 中 的 IOCSpring Framework 中 目 前 最 引 人 注 目 的 , 也 就 是 名 为 控 制 反 转 ( I

48、OC Inverse Of Control) 或 者 依 赖 注 入 ( DI Dependence Injection) 的 设计 思 想 , 这 是 相 当 优 秀 的 设 计 理 念 。 IOC, 用 白 话 来 讲 , 就 是 由 容 器 控 制 程 序之 间 的 关 系 , 而 非 传 统 实 现 中 , 由 程 序 代 码 直 接 操 控 。 这 也 就 是 所 谓 “控 制反 转 ”的 概 念 所 在 : 控 制 权 由 应 用 代 码 中 转 到 了 外 部 容 器 , 控 制 权 的 转 移 , 是 所 谓反 转 。 正 在 业 界 为 IOC 争 吵 不 休 时 , 大 师

49、 级 人 物 Martin Fowler 也 站 出 来 发话 , 以 一 篇 经 典 文 章 Inversion of Control Containers and the 使用 Hibernate 和 Spring 开发数据持久层10Dependency Injection pattern 为 IOC 正 名 , 至 此 , IOC 又 获 得 了 一 个 新的 名 字 : “依 赖 注 入 ( Dependency Injection) ”。 从 名 字 上 理 解 , 所 谓 依 赖注 入 , 即 组 件 之 间 的 依 赖 关 系 由 容 器 在 运 行 期 决 定 , 形 象 的 来 说 , 即 由 容 器 动态 的 将 某 种 依 赖 关 系 注 入 到 组 件 之 中 。在 这 里 举 一 个 简 单 的 例 子 , IBM T40 笔 记 本 电 脑 一 台 、 USB 硬 盘 和 U 盘各 一 只 , 想 必 大 家 对 这 些 东 西 都 是 比 较 熟 悉 的 了 。 这 三 个 设 备 都 有 一 个 共 同 点 , 都支 持 USB 接 口 。 当 我 们 需 要 将 数 据 复 制 到 外 围 存 储 设 备 时 , 可 以 根 据 情 况 , 选择 是 保 存 在 U

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报