基于Hibernate的数据持久层应用简述

说明:本文转载自李勇于20086月发表在《南通大学学报》(自然科学版)的一篇文章,经过了部分删减。


1 引言

        在目前的网络数据库应用项目中,为了提高数据的集成度和软件的易操作、开放性和可扩充性,选择J2EE架构是比较好的解决方案。J2EE为设计、开发、装 配和部署企业级应用程序提供了一个基于组件的解决方案。使用J2EE可以有效的减少费用,快速设计和开发企业级应用程序。系统采用面向对象的开发方法,后 台使用Oracle9i关系型数据库,因此在开发过程中采用面向对象技术和关系数据库相结合的方式。由于面向对象技术和关系数据理论基于不同的理论基础, 使得两者在协同工作时会出现阻抗不匹配的现象[1]。通过直接内嵌SQL语句或者数据访问类的方法可以解决面向对象技术和关系数据 库间不匹配的问题。前者是通过直接在类的源代码中嵌入SQL语句来实现对象关系数据库的映射和存储,这种方法简单、易于实现,但是它造成了应用程序和数据 库结构的直接耦合,违法了软件工程的原则;后者是把所有的SQL语句封装在一个或多个“数据处理类”中,较之第一种方法有所改进,但仍然没有完全消除应用 系统和关系数据库的耦合。

        一个更好的解决方案是在应用程序的业务逻辑层和数据库层之间构建一个持久层,由持久层来提供对象/关系映射服务,封装数据访问细节。采用持久层的方法可以 从根本上消除应用程序和关系数据库的耦合,使得数据访问对于应用程序的源代码是透明的。如果数据库的表结构发生改变,只需要对持久层的配置文件做适当的修 改,不会对应用程序造成影响。

2 数据持久层解决方案解析

        目前有很多不同的对象持久性工具出现,使得开发人员可以将Java对象转化为数据库中的字段或者记录,或者将数据库中的字段或记录还原为Java对象。这 些处理涉及到要将树型的Java对象序列化到数据库中,反之亦然。围绕对象关系的映射和持久数据的访问,在Java领域中发展起来了一些API和框架,这 些方案各有不同的优缺点。

2.1 JDBC(Java Database Connection)

       JDBC是一种用于执行SQL语句的Java API,由一组类和接口组成,实现对象与数据表的关联。JDBC为数据库应用开发人员提供了一种标准的应用程序接口,可以使应用程序代码与具体的数据库厂 商和数据库位置无关。不过,这种数据库访问方式在程序代码中嵌入了面向关系SQL语句,使得业务逻辑和关系数据模型进行了绑定,增加了维护软件的难度[2]

2.2 EJB (Enterprise JavaBeans)

        EJB规范定义了实体EJB的两种持久化方式:Bean自身管理的持久化(BMP)和容器管理的持久化(CMP)。选用BMP,开发者必须完成所有的数据 层访问代码,这种方式能带给开发者更大的灵活性。选用CMP,开发者不用编写数据层访问代码,EJB容器将会管理所有的数据持久化任务,数据层访问代码与 数据源之间是松耦合的[3]。在采用J2EE的应用中,EJB CMP方式得到了更为广泛应用。但是,CMP方式使得开发人员必须遵守J2EE规范,实体EJB也只能运行在EJB容器中。另外,由于不同厂商生产的CMP引擎差异很大,EJB的可移植性受到很大限制。

2.3 JDO(Java Data Objects)

        JDO是一个存储Java对象的规范,它的核心思想是在企业应用软件架构的不同层面中存储传统的Java对象(Plain Old Java Objects,简称POJOs),采用JDOQL语言进行SQL操作[4]。一些公司(包括Sun)试图根据JDO规范进行设计并实现JDO产品,然而它们都不能很好地实现,在性能优化上也有所欠缺。

2.4 ORM(Object Relational Mapper)工具

        ORM工具在Java对象与数据库之间建立映射关系,具有自我存储到关系数据库的能力,对象的改变能够直接存储到数据库而不用数据库存取代码,这样就形成相对独立的对象持久层,从而降低J2EE应用与数据库的耦合度并简化了程序开发[5]。 目前存在许多ORM工具:商业性的有TopLink、CocoBase等;开源的有Hibernate、Castou、Torque等。在众多的ORM工 具中,Hibernate是免费的、开源的,并且有丰富的文档和稳定的开发背景,因此在民族古籍数字化保护系统中采用Hibernate实现数据持久层。

3 Hibernate框架

        Hibernate是采用ORM映射机制的持久层开发工具,它是Java应用和关系数据库之间的桥梁,负责Java对象和关系数据之间的映射。内部封装了 JDBC访问数据库的操作,向上层应用提供了面向对象的数据库访问API,使开发者能够充分使用对象编程思维来操纵数据库,无需关心底层数据库机构。它不 仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操纵数据库,采用Hibernate能大大减少 数据库的工作量。Hibernate可以集成多种Web服务器或者应用服务器,而且支持几乎所有的流行数据库服务器。

        在其提供的持久化服务中,Hibernate自身通过properties和类的映射文件(mappingxml)将类映射到数据库的行,应用程序通过 Hibernate可以通过持久化的对象类直接访问数据库。Hibernate是一种开放源代码的对象关系映射框架,处于应用系统和数据库的中间层起到一 个桥梁的作用[6]

4 Hibernate数据持久化应用

4.1 Hibernate在系统应用中所处的位置

        Hibernate是Java类与关系数据库之间的桥梁,向上层应用提供了面向对象的数据访问API,向下封装了JDBC访问数据库的操作。在本项目中通 过映射文件anbooks.hbm.xml文件实现面向对象的类anbooks.java与面向关系的数据表ANBOOKS表之间的映射,业务逻辑对象 BusinessService读取Hibernate的配置信息及对象关系映射信息,通过Hibernate API提供的访问接口完成对ANBOOKS表的持久化操作[7]

4.2设计数据持久层过程

在******系统中实现基于Hibernate的数据持久层主要包含以下四步[8]

(1)创建Hibernate的配置文件。该文件用于 配置数据连接属性以及一些Hibernate的数据库操作属性,包括指定数据库的驱动程序、连接数据库的URL、连接数据库的用户名和口令等。这个配置信 息文件应该位于应用的classpath中。配置文件有XML和Java属性文件两种形式。Java属性的配置文件默认文件名为 hibernate.properties.

(2)创建持久化类。持久化类是指其实例需要被 Hibernate持久化到数据库中的类。持久化类通常都是域模型中的实体域类。持久化类符合JavaBean的规范,包含一些属性,以及与之对应的 getXXX()和setXXX()方法。持久化类符合JavaBean的规范,getXXX()和setXXX()方法必须符合特定的命名规 则,“get”和“set”后面紧跟属性的名字,而且属性的首字母为大写。

(3)创建对象-关系映射文件。映射文档是用来定义持久数据和在需要保存关于对象的持久域、关联、子类和代理的XML文档。在运行时,Hibernate将根据这个映射文件来生成各种SQL语句。

(4)生成数据库模式, Hibernate提供了从映射文件到数据库Schema的转换工具hbm2ddl。执行该任务的Java类为 net.sf.hibernate.tool.hbm2ddl.SchemaExportTask,可以直接用Java命令运行生成相应的数据库模式。

5 总结

        本文通过对J2EE环境下对象关系映射和数据持久化技术的比较分析,给出了基于Hibernate的持久层解决方案,并将其应用在*****系统中。运用 Hibernate技术实现********系统中的持久层数据访问,用持久化类来存取数据,大大提高了存取数据的速度,解决了B/S结构中数据并发访问 控制能力较低的问题。在J2EE规范中引入Hibernate,使应用系统的结构层次清晰,并实现了层与层之间的解耦,系统架构更为灵活,提高了系统的扩 展性及可维护性。




作者简介:李勇,男,计算机应用技术硕士、国家认证系统分析师、希赛专业顾问,主要研究方向:软件工程、系统架构等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值