admin 管理员组文章数量: 1184232
2024年3月28日发(作者:solr查询数据)
电脑编程技巧与维护
基于ORM的Hibernate持久层框架
杨一冰
(东南大学苏州研究院,苏州215123)
摘要:Hibernate是一个对象持久化工具,它通过其强大的O/R映射功能将Java对象同存放于关系数据库中的数
据进行的映射,避免了开发人员使用大量的SQL语句通过JDBC以及其他的方式对数据库进行操作,极大地提高了
软件的开发效率。
关键词:对象持久化;对象/关系映射;Hibernate
Based Off ORM to Persistence Layer Framework of Hibernate
YANG Yibing
(Suzhou Institute Southeast University,Suzhou 215123)
Abstract:Hibernate is a persistence service that stores Java objects in relationgal databases with its powerful,high pefrormance
object/relational persistence function.By using it,the software engineer can avoid writing a plenty of SQL sentences to operate the
database through JDBC and nother away.The efficiency of development makes great progress.
Key words:Object Persistence;O/R Mapping;Hibernate
众所周知,对象只能存在于内存中,而内存不能永久保存
数据。内存中的对象之间存在关联和继承的关系,而在数据库
bernate对JDBC做了轻量级封装[61,不仅提供ORM映射服
务,还提供数据查询和数据缓存功能,实现了广义的数据持
久化,即业务数据的保存、更新、删除、加载以及查询。
中,关系数据无法直接与表面代码形成直接的关联关系,代码
与数据库之间必须有接口。因此,把对象持久化到关系数据库
中,需要进行对象一关系的映射(简称ORM Il1),这是一项繁
琐的工作,Hibernate很好的解决了这一问题[21。把开发者从
大量的数据库操作编码中解放出来,将精力放在其他地方。
1 Hibernate
Hibernate通过创建持久化类来完成对象关系映射,再通
过一系列XML映射文件,将持久化类与关系数据库的表一一
对应起来,从而实现应用系统业务数据的持久化。所谓持久
化类,就是需要存储到数据库的Java对象模型,数据库中的
表则是其在关系数据库中的存储形式。持久化类包括一系列
属性,对应表结构中的列(即字段),而类的对象,则对应表
1.1 O/R Mapping
O/R Mapping的核心思想就是将关系数据库中表的字段
结构中的行(即记录)。此外,持久化类中还提供与属性对应
的set 0和get 0方法,用于存取数据,如图1所示。
篷用
作为对象型数据中的属性,将字段和属性一一映射到程序员
能够通过代码操作的地方,同时将数据库中表的关系映射为
对象之间的关系。它一般位于系统的数据库层和应用层之间,
将应用层的对象型数据解析成关系型数据发送到数据库,同
时将数据库返回的关系型数据封装成对象型数据再传到应用
层。O/R Mapping具有自我存储到关系数据库的能力,对对象
的改变能够直接存储,而不考虑数据库存取代码。
O/R Mapping主要包括:类屙性与数据表列的映射、类与数
旖久 羹卜卜 l业牲 ㈣蝴 j
T
l
I I硐 '垤 ‘Ⅱ嬉蕊 蝴辜
陶}量凳蔫麒射受瓢I ,
H ̄bet.r ̄'te‘嘏r
g t嘶
据表的映射、类问关系与键值的映射。常见的O/R Mapping方
案有:Top Link f商业性)、iBatis、Hibernate等131。
1.2 Hibernate
r
Ik 蠹暑ut {瞻粥 勰l删I I
I¥i商crn船曩擅|jE秤
Hibernate是一个功能强大ORM框架工具,解决了面向对
薷臻鞭摄瘁
象的应用程序和面向关系的数据库系统之间存在的“抗阻不
匹配:”[41,通过XML配置文件,将Java持久化类映射到
SQL关系数据表结构,允许开发人员使用面向对象的思想对
关系数据库进行操作[51,从而使应用系统与数据库分离,不
仅提高了系统开发效率,也提高了系统运行效率。此外,Hi一
收稿日期:2009—10—28
—
图1 Hibernate工作原理
Hibernate配置文件有两种格式171:一种是XML格式的文
件(Hibernate.C龟.xm1);一种是Java属性文件(Hibernate.prop—
erties),采用“键=值”的形式。在应用系统的开发中,Hiber—
nate配置文件中包含了JDBC连接数据库的驱动信息。
30一
S0FrWARE DEVEL0PMENT AND DESIGN
在应用程序访问数据库时,首先读取Hibernate配置文件,
再通过配置文件找到持久化类的XML映射文件,根据该映射
文件得到相应的持久化类,从而可以对类进行操作,使用
Hibernate API进行数据库访问。由于Hibernate只对JDBC做
了轻量级封装,应用程序可以使用Hibenatre API对数据库进
行操作,也可以直接绕过Hibernate使用JDBC完成数据库操
作
true”/>
/pr<operty>
软件开发与设计
<property name=”age”type=”java.1ang.Integer”>
<column name=”age”/>
</prope ̄y>
/cl<ass>
</hibernate—mapping>
以这个示例映射文件为例,以上xml代码作用是告诉
Hibernate怎样将Student类映射到student表中,其中Student
类的ID属性与表的ID字段相对应,为了方便测试,这里用
的是inrement生成器,这个主键生成器会每次从数据库表格
2 运行机制
Hibernate使用Java编写,是一个高度可配置的软件包,
可以通过两种配置文件格式来进行配置。第一种配置文件名
字为hibernate.cfg.xml,在启动时,Hibernate查询这个XML里
中获取最大ID,然后+1作为新的主键,username属性与表的
面的属性来进行操作,例如数据库连接字符串和密码,数据
库方言(database dialect),以及映射文件位置等。第二种配置
文件是映射描述文件f文件扩展名为 .hbm.xm1),它将告诉
Hibernate如何来将特定的Java类和一个或者多个数据库表格
中的数据进行映射。MyEclipse提供了工具来处理这两种配置
文件,并且可以将它们对数据库和Hibernate映射Java类的修
改进行。
一
个整体的Hibernate包括:
(1) 向项目中安装Hibernate核心类和依赖的JAR类库。
(2)创建hibernate.cfg.xml文件来描述如何访问数据库。
(3)为每个持久化Java类创建单独的映射描述文件。
如图2所示,Hibernate开发的基本方式包含了3个主要
过程,分别是Java类代码、映射文件和数据库。
e
图2 Hibernate开发的基本方式
2.1 Java类与 .hbm.xml之间的转换
现在已经配置好了一个示例的映射文件:Student.hbm.
xml,关键代码如下:
<hibernate——mapping>
<class name=”dao.Student”table=’ student”catalog=”
ejb3”>
<id name=”id”type=”java.1ang.Integer”>
<column naBe=”id”/>
<generator class=”increment”/>
</id>
<property name= ’usemame
type=”java.1ang.String”>
<column name=”usemame’
length=’’200”not—null=”
true”/>
</property>
<property name=”password’’
type=”java.1ang.String”>
<COlu mn name=”password’ length=”20”not—null=”
username
字段对应并且设置字段长度为200,不允许为空,
password属性与表的password字段对应并且设置长度为10,
不允许为空,age属性与表的age字段对应。
相对于其他的开源项目来说,Hibernate的配置文件是简
单易懂的。程序员可以轻松地修改与维护这个文件。只要定
义好了持久类与数据库中表字段的对应关系,Hibernate会通
过Ant来生成SQL语句对Student对象进行插入、更新、删
除、查找的工作。
Java类与映射文件是通过Antique工具来实现连接的,
通过Ant的运行,依靠构建脚本build.xml。再依靠Xdoclet,
来表达更多的内容,通过Xdoelet工具,可以将Java转换为需
要的映射文件,如Student.hbm.xml。
其中用到@Hibernate的标记用法:@hibernate.class标记
指定类的映射代码,table=”Student”则如hibernate的映射文
件class元素的属性值具有相同的意义;@hibernate.id标记指
定类的OID映射代码;@hibernate.property标记指定类的属性
映射代码。
2I2 .hbm.xml与数据库的联系
在Hibernate中提供支持的第三方工具可以完成映射文件
到数据库Schema之间的相互转换。
可以从映射文件使用SehemaExport工具生成DDL。在Hi—
bernate发行包的bin目录下就有一个批处理文件。生成的
Schema包含有对实体和集合类表的完整性引用约束。涉及到
的标识符生成器所需的表和sequence也会同时生成。
另外,通过Middlegen可以实现从现有的数据Schema中
生成映射文件。
总的来说,通过Hibernate项目中提供的几个命令行工具,
Xdoclet、Middlegen和AndroMDA内置的对Hibernate的支持,
可以在几个不同的环境中进行相互的转换,通过这样的形式,
Hibernate就能从容的实现Java类到数据库的联系了,这正好
符合OO原则。
3 应用
首先建立项目所需要的表格,语句如下:
CREATE TABLE Student(
id int NOT NULL auto
_
increment,
usemame varchar(200)NOT NULL,
password varchar(20)NOT NULL,
一
31—
电脑编程技巧与维护
age mt,
PRIMARY KEY(id)
)ENGINE=MyISAM DEFAULT CHARSET=GBK
接着用MyEclipse来开发一个简单Hibernate项目。
3.1编辑配置文件hibernate.cfg.xml
编辑好的xml文件如下:
<?xml version= 1.0 encoding= UTF-8 ?>
<!DOCTYPE hibernate-configuration PUBLIC
”
-
//Hibemate/l-Iibemate Configuration DTD 3.0//EN”
”http://hibernate.sourceforge.net/hibernate-configuration一3.
0.dtd’’>
<!一一Generated by MyEclipse Hibernate Tools.——>
<hibernate—configuration>
<session-factory>
<!~显示后台的SQL,便于调试一>
<property name=”show
—
sql”>true</property>
<pr叩eny name=”connection.usemame”>root</property>
<property
name=”connection.url”>jdbc:mysql://localhost:3306/test?
useUnicode=tru
e&characterEncoding=GBK</property>
<property
narne=”dialect”>org.hibernate.dialect.MySQLDialect<,
property>
<pr叩eny name=”myeclipse.connection.profile”>mysql5</
property>
<pr叩erty
nalrle=”connection.driver
class”>corn.mysq1.jdbc.Driver</
property>
</session—factory>
3.2通过反向工程生成Student的Java类
通过简单配置过程,能够很容易生成如下Hibernate类和
映射文件:
BaseHibernateDAO.java,HibemateSessionFactory.java,
IBaseHibemateDAO.java,
Student.java,
StudentDAO.java。
3.3编写测试代码
import org.hibernate.Transaction;
import dao. :
,术木
Hibernate DAO的测试类.
@authorBeanSoft
丰,
public class HibemateDAOTest{
public static void main(S ng口args) {
,/实例化DAO
StudentDAO dao=new StudentDAO 0:
|| 歼每务
Transaction tran:dao.getSession().beginTransaction()
,/生成普通Java类
Student bean=new Student 0:
,/设置属性
bean.setUsername(”张三”);
bean.setPaSSWOrd f”1234”1:
bean.setAge(1OO);
一
32一
,,插入数据
dao.save(bean);
//提交事务
tran.commit();
,,读取数据
J
dao.getSession 0.close 0;
)
}
3.4项目结果
使用MySQL的界面查看工具Navicat 8 for MySQL,可以
方便地查看到结果,如图3所示。
图3项目运行结果
4结语
对Hibernate运行机制进行深入的分析与讨论,为ORM
做了理论准备。这样可以有效地实现业务对象到关系数据库
的映射,简化了数据库操作编程,降低了开发难度,使得开
发人员能够专心地实现业务逻辑而不用分心于繁琐的数据库
方面的逻辑。
参考文献
【1】
荣林.用Hibernate实现Java对象持久化[D】.2006:1-3.
【2]
刘冰,李正凡,刘邦桂.基于Hibernate的数据持久化应用
研究【JJ.科技广场,2008:49—51.
[3】
顾丽红,周涛.Hibernate性能优化研究『J1.计算机工程
与设计,2008,29(7):1739—1744.
【4]
杜玲玲.基于Hibernate框架的数据持久化应用开发[J】.
微计算机信息,2006,23(4):56—57.
覃宇,马铁军.Hibernate数据持久化技术在轮胎企业MES
中的应用[J].计算机工程与应用,2006,42(35):208—
210.
【6】
高昂,卫文学.基于Hibernate与Struts框架的数据持久化
应用研究【J】.计算机应用,2005,25(12):2818—2819.
【7】
钱忠生.基于Hibernate的数据持久化研究及其应用[J1.
微计算机信息,2007,23(24):242—244.
f8】 AUER C,KING G.Hibernate in action【M】.Greenwich:
Manning Pulications Co.,2005.
作者简介
杨一冰,男(1986一),硕士研究生,研究方向:软件开发技
术。
版权声明:本文标题:基于ORM的Hibernate持久层框架 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1711625974a602446.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论