没有合适的资源?快使用搜索试试~ 我知道了~
首页开始冬眠_Hibernate教程
资源详情
资源评论
资源推荐
目录
ORM 简介.................................................................................................................. 2
ORM 的出现 ....................................................................................................... 2
ORM 的责任 ....................................................................................................... 3
Hibernate 的配置文件 ................................................................................................ 5
主配置文件 ........................................................................................................ 6
映射文件............................................................................................................ 8
映射类 ............................................................................................................... 9
单表 CRUD................................................................................................................. 9
事务................................................................................................................. 12
与 Spring 整合 ......................................................................................................... 15
意义何在? ...................................................................................................... 15
从 SessionFactory 开始 ...................................................................................... 15
改造 DAO 和 Service .......................................................................................... 18
开 始 冬 眠
Starting With Hibernate
厌 倦 了 无 休 止 的 拼 凑 SQL 语 句 吗 ?
厌倦了不 断 重 复 获 取 、 释 放 数 据 库 连 接 的 代 码 吗?
本 文 通 过 介 绍 流 行 的 Hibernate 框 架 ,带 您 进 入 ORM
的领域。
从 此 您 可 以 用 更 简 单 , 更 优 雅 的 方 式 解 决 系 统 的 持
久化问题
付 老实
8/10/2006
ORM 简介
ORM 的出现
很多程序员的日常工作就是在进行 ORM( 对 象 、 关 系 映 射 ), 对 我 来 讲 这 是 一 个 痛 苦 的
过 程 。 我 们 的 分 析 、 设 计 乃 至 编 码 都 已 经 面 向 对 象 了 , 但 是 在 程 序 深 处 的 某 个 地 方 , 我 们 不
得不将一个完美的对象转换成一条丑陋的 SQL 语句,如下所示:
public void addStudent(Student stu) {
S trin g sq l = “IN S E R T IN T O stu d e n t(id ,na m e ,sco re ) V A L U E S (“ + stu .g etId () + “,’” +
stu .g e tN a m e () + “’,” + stu .ge tS co re () + “)”);
S yste m .o u t.p rin tln (“sql = “ + sq l);
exeuteUpdate(sql);
}
或者你是一个比较了解 JDBC 的程序员:
public void addStudent(Student stu) {
S trin g sq l = “IN S E R T IN T O stu d e n t(id,n a m e ,sco re) V A L U E S (?, ?, ?)”);
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, stu.getId());
pst.setString(2, stu.getName());
pst.setInt(3, stu.getScore());
exeuteUpdate(pst);
}
你应该可以看出,在这两段令人生厌的代码中,还没有包含数据库连接的获取与释放。
是 的 , 曾 经 有 一 段 时 间 , 我 每 天 编 码 的 主 要 工 作 就 是 处 理 这 些 杂 乱 、 缺 乏 标 准 的 SQL
和很难伺候的数据库连接。 当表的字段数量超过 30 个时,程序员极容易变得心浮气躁„„
穷则思变,很多程序员在寻找解决问题的良方,于我来说,做过这么几种尝试:
1. 利用代码生成器
很多程序员醉心于各种各样的代码生成器,从 JavaBean 中属性的 getter/setter,
到数据表的 CRUD 操作。确实,这些 INSERT、 SELECT 语句有很强的规律性,可以
通过读取数据表的 MetaData 生成。这个方法最大的缺陷就是不够灵活,只能生成
常见的一些操作代码,对于稍微特殊些的需求,程序员还是摆脱不了写一大堆 SQL
语 句 的 命 运 。 另 外 , 当 数 据 表 的 结 构 发 生 变 化 的 时 候 , 必 须 重 新 生 成 代 码 , 这 时 候
就需要特别小心翼翼,别把之前自己写的代码覆盖掉。(不过我对代码生成工具实
在 比 较 着 迷 , 最 近 在 写 一 个 根 据 数 据 表 自 动 生 成 Struts 框架下的 CRUD 操作的小东
西)
2. 编写描述数据表的类
为了防止重新生成代码时可能引发的版本冲突,我也试过用一个 JavaBean 描
述数据表的结构(不仅仅描述字段名 称 , 还 包 括 类 型 , 是 否 为 主 键 /外键,是否可
为 null, 默 认 值 等 ), 然 后 根 据 这 些 描 述 由 程 序 动 态 的 生 成 SQL 语句。然而当数据
表 结 构 改 变 时 , 大 量 的 代 码 更 改 还 是 难 以 避 免 的 , 并 且 这 个 方 法 给 程 序 添 加 了 不 少
复杂性。
3. 运用反射、代理机制实现数据库操作
这个方法的灵感来自于 EJB 中实体 Bean 的 CMP, 只 需 要 写 一 个 JavaBean 描述
数 据 表 的 字 段 , 然 后 运 用 反 射 、 代 理 机 制 对 其 getter/setter 方 法 进 行 拦 截 , 就 可 以
在底层完成 CRUD 操作。实际上这也是 Hibernate 的基本原理。只是这套方案过于
复杂,除了基本的 CRUD 操作,还要考虑到多表连查,性能问题,主键的多样性,
事务等很多方面,最后我只能知难而退„„
看 到 这 里 , 我 想 读 者 应 该 了 解 了 程 序 员 的 痛 苦 。 也 许 你 正 在 经 历 这 些 , 觉 得 代 码 编 写 实
在 是 个 苦 力 活 , 丝 毫 没 有 艺 术 性 可 言 。 不 过 现 在 你 可 以 停 止 抱 怨 了 , 许 多 开 发 者 都 和 你 一 样
厌 倦 了 这 一 切 , 于 是 其 中 比 较 有 天 分 的 人 开 始 动 手 制 作 通 用 、 易 于 维 护 扩 展 、 易 于 使 用 的
ORM 框架,现在开始,让 SQL 语句去冬眠吧。
ORM 的 责任
按照我粗浅的认识,一个 ORM 框架应该具有这些功能:能将对象按照指定的规则转换
为数据表中的一条记录,同样也能将数据表中记录转换 为 一 个 对 象 ; 能 够 在 不 同 的 数 据 库 间
切换,而且对用户而言切换是透明的。
上图简单描述了采用 ORM 前后系统结构的区别,采用 ORM 前 , 由 DAO 负责将数据对
象和特定数据库之间的转换;采用 ORM 后,DAO 则可以把这部分的工作委派给 ORM, 在 代
码复杂度大幅减小时,更获得了可以将应用移植到不同数据库的好处。
有了 ORM,程序员终于不同关心底层关系型的数据库,可以专心研究 OO 领域中的业
务实体了。ORM 框架甚至给了我们一个不学 SQL 语句的 理 由( 虽 然 面 前 看 来 还 是 得 学 „ „ )。
下面附上本文讲解 Hibernate 的 MindManager 图,以供参考
Hibernate 的 配 置 文 件
Hibernate 是众多 ORM 框架中的佼佼者,同样有名的还有 iBatis, JDO 等,不过一通百
通,先来说说 Hibernate 吧。
Hibernate 需要两种配置文件才能正常运行,一种是主配置文件(我是这么称呼它的),
一种是映射文件。
主 配 置 文 件
主配置文件一般名为 hibernate.cfg.xml, 负 责 配 置 底 层 数 据 库 的 连 接 信 息 以 及 hibernate
的一些选项,一个典型的底层数据库采用 MySql 的主配置文件内容如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/hh</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/xaccp/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
为了方便描述、加深印象,我用不同的颜色标示了这个 xml 格式的文件。
红色部分是数据库连接的配置,包括驱动程序类名、连接字符串、用户名、密码
绿色部分让我们选择 SQL 语言分支(很多地方译做“方言”),这一点揭示了 Hibernate
是如何来处理不同数据库间 SQL 语句差异的。Hibernate 为不同的数据库写了不同语言分支
类,这些类处理了数据库间的差异。如果我们需要切换不同的数据库,修改完数据库连接部
分后,只需要再修改一下 SQL 语言分支就可以了。
下面列出 MySql 和 SqlServer 语言分支类的部分代码,大家应该可以了解,为了让使用
者忽略具体数据库的差异,Hibernate 做了多少的工作。
public class MySQLDialect extends Dialect {
剩余25页未读,继续阅读
Underwind
- 粉丝: 4
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0