hibernate培训教程

上传人:油条 文档编号:35208011 上传时间:2018-03-11 格式:PDF 页数:21 大小:409.59KB
返回 下载 相关 举报
hibernate培训教程_第1页
第1页 / 共21页
hibernate培训教程_第2页
第2页 / 共21页
hibernate培训教程_第3页
第3页 / 共21页
hibernate培训教程_第4页
第4页 / 共21页
hibernate培训教程_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《hibernate培训教程》由会员分享,可在线阅读,更多相关《hibernate培训教程(21页珍藏版)》请在金锄头文库上搜索。

1、Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 1 Hibernate 培训教程 作者: 钱安 川(Moxie) 学 员 要求: 熟悉 Java 、SQL 、JDBC , 掌握 面向 对象 的开发 方法 , 并有 实际 的 项目开 发经 验。 培训目 标: 让学 员了解O/R Mapping 原 理, 掌握Hibernate 开发的 相关 知识, 并能 使 用Hibernate 进行实 际项 目开 发。 (让学 员理 解典 型的 三次 架构, 如何 用 O/R Mapping 框架 来实 现我 们的 数据 层。 这 里主 要介 绍现在 非常 流程 的 Hibe

2、rnate 框 架, 希望 通过 培训 之后 , (学 员了解 Hibernate 的架构 ,掌 握 Hibernate 相关 的概 念; 并 教学员 如何 做对 象和 关系 的映射 ,如 何在 应用 中使 用 Hibernate ) 后面还 有一 个“Hibernate 高级进 阶” 两个 生活 中的 案例 : 一、 招聘时 对 Hibernate 的 提问; 二、 一个 使用 Hibernate 的失败 项目 Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 2 数据源层O/R Mapping 主要介 绍三 层架 构, 如何 分层? (逻 辑上 的分 层,

3、二个原 则) 数据层 技术 的选 择: 直接 使用 SQL/JDBC : 优点:很多开发者熟悉关 系数据库管理系统,理解 SQL ,也知道如何使用表和外键进行工 作。 此 外, 他们 可以 始终 使用众所 周知 并广 泛使 用的 DAO 设计 模式 对业 务逻 辑隐藏 复杂 的 JDBC 代码 和不 可移 植的 SQL 。 缺点: 为域 中的 每个 类手 工编写 持续 性代 码的 工作 是非常 可观 的, 特别 是需 要支持 多 种 SQL 方言时 。 这 项工 作通 常会 消耗很 大一 部分 的开 发努 力。 此 外, 当需 求改 变时, 一个手 工编 码 的解决 方案 总是 需要 更多 的

4、注意 和维 护努 力。 序列化: Java 有一 个内 建 的持久 化机 制: 序列 化提 供了将 对象 图 ( 应用 状态 ) 写到 字节 流中 的 能 力, 然 后它 可能 被持久 化 到文 件或 数据 库中。 持 久 化也被 Java 的远 程方 法调用 (RMI ) 使用来 为复 杂对 象传 递值 语义。 持久 化的 另一 种用 法是在机 器集 群中 跨节 点复 制 应用状态。 缺 点: 很不 幸, 一个 相互连 接 的对 象图 在序 列化 之后 只 能被 当作 一个 整体 访问 , 如 果不 反序 列化整 个流 就不 可能 从流 中取出 任何 数据 。 这 样, 结 果字节 流肯 定

5、会 被认 为不 适合进 行任 意 的检索 或聚 合。 甚至 不可 能独立 地访 问或 更新 一个 单独的 对象 或子 图。 非常明 显, 因为 当前 特定 的技术 ,序 列化 不适 合于 作为高 并发 性 的 Web 和企 业应用 的持 久 化机制 。在 特定 的环 境中 它被作 为桌 面应 用的 适当 的持久 化机 制。 EJB entity beans EJB1.1 实体 Bean 在实 践中 彻 底地 失败 了。EJB 规 范的设 计缺 陷阻 碍了 Bean 管理的 持续 性 (BMP )实 体 Bean 有效 地执行 。在 EJB1.1 许 多明 显的缺 陷被 纠正 之后 ,一 个边缘

6、 的稍 微 可接受 的解 决方 案是 容器 管理的 持续 性(CMP ) 。然而 ,CMP 并不 能表 示一 种对 象- 关系不 匹配的 解决 方案 。 CMP 缺 点: CMP 实体 Bean 的粒 度既太 粗 又太 细:CMP Bean 与 关系模 型中 的表 是按 照一 对一的 方 式定义 的。 这样 ,它 们的 粒度过 粗, 不能 够完 全利 用 Java 丰富 的类 型。 虽然 EJB 可 以利 用继 承实现 , 但实体 Bean 并不 支持多 态 的关 联和 查询 不管 EJB 规范 所宣 称的 目标 , 实体 Bean 实际 上是 不可移 植的 。CMP 引 擎的性能因 厂 商而

7、异 ,并 且映 射元 数据 也是高 度特 定于 厂商 的。 实体 Bean 不 可序 列化 。我们 发 现当 我们 需要 将数 据传 输 到远 程客 户层 时,我们 必 须定 义额外 的数 据传 输对 象(DTO ,也 被称 作值 对象 ) 实体 Bean 必 须依 赖于 EJB 容器 测试 困难 。 JDO 、Object-oriented database systems 大多数 面向 对象 的数 据库 系统 对 ODMG 标 准都 提供了 许 多程 度的 支持, 但据我 们 所知, 还 没有完 全的 实现 。此 外, 在规范 发布 以后 的很 多年 ,甚至 到 了 3.0 版 ,还 是感

8、 觉 不太 成熟, 并 且 缺乏 很多 有用 的特 征,特别 是基 于 Java 环境 的。ODMG 也 不再 活跃。最近 ,Java 数据Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 3 对象(JDO) 规范 (发 表于 2002 年 4 月) 揭开 了新 的可能 性。JDO 由面 向对象 数 据库 团体 的 成 员驱 动,除 了对 现有的 ODMG 的支 持之 外, 面 向对象 的数 据库 产品 现在 还经常 将其 作 为主要 的 API 采 用。 JDO 的 优点在 于它 很简单 。开发 人员 使用 Java 语 言持久 存储 对象实 例并 从 存储器

9、 检索 实 例 。 处 理逻 辑、 同步 和故障 转 移等 均被 透明 地处 理。 开发 人员 无需 使用 SQL 或 Java 语言 提供的不 便的 序列化 机制 ,只使用 POJO(无格 式 普通 Java 对象 )即可 , 利用 JDO 接口 将对象 引用 传递 到存 储器 中并从 存储 器检 索对 象引 用。 O/R Mapping 什 么是 O/R Mapping?它有 什 么优 点? 简单地 说, 对 象- 关系映 射 就是 Java 应 用中 的对 象到 关系数 据库 中的 表的 自动 的 (和透 明的) 持久 化, 使用 元数 据(meta data)描述 对象 与数据 库间

10、的映 射。 本质 上,ORM 的工 作是将 数据 从一 种表 示( 双向) 转换 为另 一种 。 提高生产率(Productivity ) 与持久 性有 关的 代码 可能 是 Java 应用 中最 乏味 的代 码。Hibernate 去掉 了很 多让 人 心烦 的工作 (多于 你的期 望) , 让你可 以集中 更多的 精力 到业务 问题上 。不论 你喜 欢哪种 应用开 发策略 自顶 向下 , 从 域模型 开始 ; 或者自 底向 上, 从一 个现 有的数 据库 模式开 始使 用 Hibernate 和适 当的 工具将 会 减少 大量 的开 发时 间。 可维护性(Maintainability )

11、 减少 了代 码, 重构 更方 便,提 高了 可维 护性 。ORM 是对 象和 关系 数据 库之 间的缓 冲区 , 用来很 好的 将他 们隔 离。 更好性能(Performance ) ORM 软 件的 实现 人员 可能 有比你 更多 的时 间来 研究 性能优 化问 题。 你知 道吗 ,例如 , 缓存 PreparedStatement 的实 例对 DB2 的 JDBC 驱动 导致了 一个 明显 的性 能增 长但却 破坏 了 InterBase 的 JDBC 驱 动? 你了解 吗, 对 某些 数据 库只 更新一 个表 中被 改变 的字 段可能 会非 常 快但潜 在地 对其 它的 却很 慢?在

12、你手 工编 写的 解决 方案中 , 对这 些不 同策 略之 间的冲 突进 行 试验是 多么 不容 易呀 ? 厂商独立性(Vendor independence ) ORM 抽 象了 你的 应用 使用下 层 SQL 数据库和 SQL 方言的 方式 。如 果工 具支 持许多 不 同的 数据 库(dialect ) ,那么 这会 给你 的应用 带来 一定 程度 的可 移植性 。你 不必 期望 可以 达 到“一 次编写 ,到处 运行” ,因为 数据库 的性能 不同 并且达 到完全 的可移 植性 需要牺 牲更强 大的平 台的 更多 的力 气。 然而, 使用 ORM 开 发跨 平台的 应用 通常 更容 易

13、。 即使你 不需 要跨 平台操 作,ORM 依然 可以 帮你减 小被 厂商 锁定 的风 险。另 外, 数据 库独 立性 对这种 开发 情 景也有 帮助 : 开发 者使 用一 个轻量 级的 本地 数据 库进 行开发 但实 际产 品需 要配 置在一 台不 同 的数据 库上 。 如何做 对象 关 系数 据库 映射? ( 最后 引入 Hibernate ) public class User private Long id; private String name; Hibernate 培训教程 Email: 版权所有,如果转载和篡改,请注明出处 4 private List address; cre

14、ate table tbl_user ( id bigint not null auto_increment, name varchar(255), primary key (id) ) Java 数据库 类的属 性( 基本 类型 ) 表的列 类 表 1:n/n:1 外键 n:m 关联表 继承 单表继 承、 具体 表继 承、 类表继 承 1、 Java 基本 类型 表 的 2、 Java 类的 映射 3、 关 联 的映 射: 例如 一个 User 有 多个 Address,User 和 Address 管理 ,User 删 除时, 相应 的 Address 也应 该删 除。 对象 关系 的不

15、匹配 范式 (paradigm ) 1、 粒度(granularity )的问题 。 增加一 种新 的数 据类 型, 将 Java 地址 对象 在我 们的 数据库 中保 存为 单独 的一 列,听 起 来好像 是最 好的 方法 。毕 竟,Java 中的 一个 新的 地址 类与 SQL 数据类型 中的 一个新 的地 址 类 型 可以 保证 互用 性。然而 ,如 果你 检查 现在 的数据 库 管理 系统 对用 户定 义列 类 型(UDT ) 的支持 ,你 将会 发现 各种 各样的 问题 。 2、 子类型 (subtypes) 的 问题。 子类 型不 匹配 是指 Java 模 型中 的继 承结 构必

16、须被持 续 化到 SQL 数据库 中, 而 SQL 数 据库并 没有 提供 一个 支持 继承的 策略 。如 何解 决多 态? 3、 同一性 (identity )的问题 Java 对象 定义 了两 种不 同的 相 等性 的概 念: 对象 同一 性( 粗略 的等同 于 内存 位置 的相 等, 使用 a=b 检 查) 通过 equals() 方法的 实 现来决 定的 相等 性( 也被 称作值 相等 ) 另 一方面 ,数据 库行的同一 性使用 主键值 表示。主键 既不必 然地等 同于“equals() ”也 不等 同 于“= ” 。它通 常是 指几个 对 象 (不 相同 的)同时表 示 了数 据库 中相 同的 行。而且 , 为 一 个 持 续类 正确 地实现 eq

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号