利用Hibernate对象持久化服务简化Java数据库访问
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期 :2003 - 06 - 10 作者简介 :宋汉增 (1979 - ) ,男 ,河南郑州人 ,硕士研究生 ,主要研究方向 :计算机网络 ; 沈琳 (1963 - ) ,女 ,四川成都人 ,副教授 ,主要研究 方向 :计算机网络.
1 36
计算机应用
2003 年
在自 己 的 底 层 管 理 J NDI、JDBC、J TA , 在 上 层 向 外 提 供 SessionFactory、Session 、Tracsaction 的 接 口 , 供 Client 控 制 perisistent object 之用 。 1. 3 Hibernate 与 CMP 的比较
我们 可 以 综 合 利 用 这 两 种 持 久 化 机 制 的 优 势 : 使 用 Session EJB 来 管 理 事 务 、安 全 、线 程 、远 程 调 用 等 ; 使 用 Hibernate 来进行对象持久化 。
2 Hibernate 在报表系统中的应用
本系统定位于一个基于 Internet/ Intranet 的报表系统 。 它可以利用计算机网络完成报表接受 (自动/ 手动) 、发送 (自 动/ 手动) 、表内数据计算 、跨表数据计算 (定时/ 随时) 以及数 据挖掘功能 。在实现上 ,涉及 Excel 表格识别 、读写 、传送 、跨 表计算 、数据库存取 、数据挖掘等技术 。Excel 表格的识别和 读写 ,用 Apache 的 PO I HSSF 来 完 成 ; Excel 的 传 送 用 Java Mail 来完成 ; 数据库部分就采用 Hibernate 的对象持久化服 务 ,采用它的最大化模式 ;跨表计算采用模板机制 ,使每一期 报表对应有模板 ,利用模板上每个单元格定义的公式来完成 整张报表数据的计算 。
Hibernate 的配置可以使用 properties 文件和使用 XML 配置文件进行配置 。我推荐大家使用 XML 配置文件进行配 置的方法 ,简单不易出错 。配置文件必须被命名为 hibernate. cfg. xml 。我们主要配置数据库连接的各种参数和根据项目 的进展逐步添加涉及的映射文件 ,以供 Hibernate 管理事务 、 产生 SQL 和 管 理 JDBC 连 接 等 。在 本 系 统 中 , 配 置 文 件 hibernate. cfg. xml 如下 :
第 23 卷第 2003 年 12
12 月
期
计算机应用 Computer Applications
Vol. 23 , No. 12 Dec. , 2003
文章编号 :1001 - 9081 (2003) 12 - 0135 - 03
利用 Hibernate 对象持久化服务简化 J ava 数据库访问
于是 ,各种团体都试图找出一种解决方案 ,以求让开发人 员摆脱这方面的风险 ,从复杂而繁琐并且重复性很大的工作 中解脱出来 ,以全新的完全面向对象的概念和业务意识来指 导开发 。期间 ,诞生了如 JDO 、OJB 等对象持久化技术 ,还有 我们即将要讨论的 Hibernate 。
1 Hibernate
generation) 。Hibernate 利用 reflection 机制 ,在系统启动时生 成 SQL 语句 ,进行对象的持久管理 。
Hibernate 对每一种数据库都有对应的 Dialect 进行操作 优化 ,从而提高它在各种情况下的效率 。目前 ,它的版本为 2. 0 , 支 持 的 数 据 库 有 Oracle , DB2 , MySQL , PostgreSQL , Sybase , Interbase ,Pointbase ,Microsoft SQL Server , MckoiSQL , Progress ,SAP DB ,以及 HypersonicSQL 。 1. 2 Hibernate 原理
Key words : Java ; Hibernate ; O/ R mapping ;object persistence
Internet 的 快 速 发 展 , 推 动 了 Java 语 言 的 产 生 。进 行 J 2 EE 标准的开发时 ,如果直接采用 JDBC 的方式进行数据库 操作 ,一方面工程浩大 、代码冗长 ,另一方面不易维护 、危险性 更大 。
在该网络报表系统中 ,所有的业务对象 ,如用户对象 、模 板对象 、报表对象 、权限对象 、角色对象 、模板和报表的各种单 元格对象都由 Hibernate 持久化服务将其映射至数据库中相 关的表 ,这些对象之间的关系表 ,如一对一 、一对多 、多对多等 也由 Hibernate 映射中的 one2to2one ,many2to2one ,collection 的 many2to2many ,one2to2many 等元素映射在持久化对象中 。 2. 1 Hibernate 配置
图1 Hibernate 具有很大的灵活性 ,界于它的最大模式和最小 模式之间的某些功能构件是可选的 。在最小模式下 ,你可以 自己使用 JDBC ,可以利用 J TA 管理自己的事务 ,也可以使用 J NDI。Hibernate 这 时 通 过 SessionFactory 提 供 Session , 在 Session 中对持久化对象进行操作 。在最大模式下 , Hibernate
(School of Com puter Science and Engi neeri ng , S ichuan U niversity , Chengdu S ichuan 610065 , Chi na)
Abstract : Hibernate is a persistence service t hat stores Java objects in relational databases wit h its powerful , high performance object/ relational persistence function. Using it , t he developers can avoid writing many SQL sentences to operate t he database t hrough JDBC. And it can improve t he development efficiency evidently. In our network based reports system , we have taken full advantage of it .
宋汉增 ,沈 琳 (四川大学 计算机学院 ,四川 成都 610065)
摘 要 : Hibernate 是一个对象持久化工具 ,它通过其强大的 O/ R 映射功能将 J ava 对象同存放于 关系数据库中的数据进行映射 ,避免了开发人员使用大量的 SQL 语句通过 JDBC 的方式对数据库进 行操作 ,可以有效地提高开发的效率 。将其应用于网络报表系统中 ,可充分利用其优点 。
hibernate2configuration22. 0. dtd" > < hibernate - configuration >
< session - factory name = " / jndi/ name" > < property name = " show- sql" > true < / property > < property name = " hibernate. dialect" > net . sf . hibernate. dialect . SybaseDialect < / property > < property name = " hibernate. connection. url" > jdbc : J SQLConnect :/ / 192. 168. 1. 2 :1433 < / property > < property name = " hibernate. connection. driver-class" > com. jnetdirect . jsql. J SQLDriver < / property > < property name = " hibernate. connection. database" > report < / property > < property name = " hibernate. connection. username" > report < / property > < property name = " hibernate. connection. password" > report < / property > < mapping resource = "conf/ Project . hbm. xml" / >
1. 1 Hibernate 介绍 Hibernate 是一种比较彻底的 Java 对象映射工具 ,支持所
有 的 使 用 各 种 Java 思 想 如 inheritance , association , composition , collections 等实现的对象 。它可以直接映射大部 分的 JavaBean 而不需要对它们作任何修改 ,即使修改最多也 就是在 Bean 里面加上一些私有访问方法 ;可以将一个用户定 义的多个类的实例映射到一张表的同一行 ;还可以利用代理 模式来简化载入类的过程 。这将大大减少利用 Hibernate QL 从数据库提取数据的代码的编写量 ,从而节约开发时间和开 发成本 。
相对 于 CMP ( Container2Managed Persistence) , Hibernate 可以被称作是“Service”,因为它跟 CMP 的实现方式完全不 同 。这种持久化服务是一个由业务逻辑调用的接口 ,业务逻 辑是客户端 。它的一大优势就在于你可以把被持久化的对象 实现成脱离这个持久化环境依然可以运行的类 。
从图 1 可以很清楚地看出 Hibernate 的持久化服务在一 个数据库应用中的作用 :应用程序通过 Hibernate 与数据库发 生关系 ,对数据进行操作 。而 Hibernate 自身通过 properties 和类的映射文件 ( mapping xml) 将类映射到数据库的行 。从 而 ,Application 可以通过持久化的对象类直接访问数据库 ,而 不是必须使用 JDBC 和 SQL 进行数据的操作 。
每一种持久化机制都有一种对持久化对象属性的访问机 制 。比 如 说 Serialization 使 用 reflection , CMP 使 用 code generation ,JDO 使用 byte2code processing。Hibernate 使用的是 Runtime reflection ( 也 就 是 CGL IB2style runtime byte2code
大家在 Java 编程中经常会用到一些 x x FrameWork 的工 具 ,为什么叫 FrameWork ? 因为它们都规定你的代码要按某 种规则来写 ,就像一个框架 ,你只能往里面填东西而不能修改 它的“外形”。一些持久化机制就是基于这种原理 ,利用在持 久化的对象上添加框架来发挥作用 ,这类机制可以被称为框 架化机制 。CMP 就是这种机制的典范 。在这类机制中 ,由框 架调用业务范围的类 ,框架是“客户”。这类机制的一个特色 就是它提供一个管理环境 ,在这个环境中实例化持久的对象 ; 一旦离开这个环境 ,代码就不能运行 。并且 ,在这种机制下 , 编译 、测试 、调试周期会很漫长 。再者 ,在 EJB 的情况下 ,它 会导致一些奇怪的 、不自然的执行 ;当然 ,这也有积极的一面 , 有利于框架进行数据流通 、安全 、内存分配的管理 。
关键词 :J ava ; Hibernate ;对象/ 关系映射 ;对象持久化 中图分类号 : TP311. 52 文献标识码 :A
Simplif ication of Java Database Access with Hibernate Service
SON G Ha源自文库2zeng , SHEN Lin
< ?xml version = ′1. 0′encoding = ′utf28′?> < !DOCT YPE hibernate2configuration PUBL IC
" - / / Hibernate/ Hibernate Configuration D TD/ / EN" " http :/ / hibernate. sourceforge. net/