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一),硕士研究生,研究方向:软件开发技 

术。 


本文标签: 数据库 映射 数据 对象 文件