APP下载

基于Hibernate框架数据持久化的设计与实现

2019-04-01向大芳

科技创新导报 2019年28期

向大芳

摘   要:Hibernate是一种数据持久化框架,其基于ORM模式,用于解决数据访问层和业务逻辑层之间的松散耦合问题。为了提高应用系统的数据并发访问控制能力,构建层次清晰的系统架构,本文深入研究了Hibernate框架的持久化技术,将该技术应用于某企业生产计划管理系统,按照低耦合的标准,对数据持久化操作与业务逻辑进行了分离和封装,进一步阐述了应用Hibernate框架进行数据持久化的具体实现过程。案例表明,Hibernate框架在实现复杂业务系统时能极大提高开发效率和系统的可维护性,增强了系统的扩展性。

关键词:Hibernate框架  数据持久化  ORM

中图分类号:TP311.13                             文献标识码:A                         文章编号:1674-098X(2019)10(a)-0135-05

Abstract: Hibernate is a data persistence framework based on ORM mode, which is used to realize loose coupling between business logic layer and data access layer. In order to improve the concurrent access control ability of data, build a clear hierarchy of application system architecture, deeply study the Persistence technology of Hibernate framework, apply this technology to an enterprise production planning management system, separate and encapsulate the data persistence operation and business logic according to the low coupling standard. The implementation process of data persistence using hibernate framework is described. The case shows that the Hibernate framework can greatly improve the development efficiency and maintainability of the system while enhancing the scalability of the system.

Key Words: Hibernate; Data persistent; ORM

许多传统生产性国有企业中,随着生产规模的日益扩大,生产的产品的种类也不得增加,这导致生产管理的范围日益扩大,涉及的业务逻辑亦日益复杂,多工段或工种或车间之间的工作协同也更加困难。在信息化时代,这些企业不得不使用信息化技术和方法来推动和改进过去传统的生产管理流程。其中基于BS架构的Web应用程序以开发周期短、可维护性强、轻量级、免安装、强大的用户体验、完美的交互等特点,在各行各业崭露头角,开始扮演重要角色[1-2]。

随着web2.0的迅速发展,但在BS架构下选择何种框架组合构建Web应用程序使得人们犹豫不决,这其中应用什么样的框架来进行数据的持久化更让开发者们难以抉择。就Web应用系统开发中数据持久化技术现状而言,用于提高应用系统开发效率的成熟方法多种多样,其中采用Hibernate框架是一个不错的选择,其不仅能有效提高应用系统的开发效率,同时在安全性、稳定性和健壮性上都有良好的保证。本文以某国有企业生产计划管理系统为案例详细阐述Hibernate技术实现数据持久化的过程。

1  Hibernate技术分析

Hibernate是一种在开发人员中有着广泛赞誉的开源框架,其遵循ORM(Object/Relation Mapping)模式,主要通过面向对象的java实体类POJO到关系数据库的映射来实现数据的持久化,该框架使得开发人员可以采用面向对象的方式来开发应用。Hibernate不仅管理POJO到数据库表的映射,提供数据查询和获取数据的方法及延迟加载等重要功能,而且还拥有功能强大的查询语言HQL,减少了开发时使用SQL和JDBC处理数据的时间,降低了开发难度[3]。

2  生产计划管理系统分析

该生产计划管理系统为某国有企业的管理人员、计划制定人员、工段(车间)生产人员、仓库管理人员等提供一个基于生产全流程的多用户的生产在线控制环境。系统包括人员及权限管理、物资管理、生产计划管理、补废管理、产品出入库管理及合同管理等6个子系统。系统架构如图1所示。為提高访问开发效率、减少SQL和JDBC处理数据的时间,同时也为降低数据模块耦合提高模块的扩展性、可复用性,系统的数据访问采用Hibernate框架实现。Hibernate可以实体对象到关系数据库的映射,利用hibernate将数据库的访问和操作进一步进行独立的封装,采用视图、存储过程、缓存等技术,可以极大提升数据库的性能及可维护性[4-7]。

3  数据库的设计

生产计划管理系统数据存储实现采用开源的关系数据库mysql。数据库的设计完全遵从关系型数据库的设计规范和要求,为提升系统的部署效率,不使用hibernate通过映射生成表结构,而是自主建立了基础数据表,表的关系结构如图2所示。

4  领域对象层的设计

领域对象(Domain Object)本质上就是实体类,它描述了系统业务逻辑的各类状态,作用于表现层、业务层和持久层并被持久化到数据库中。使用hibernate框架可以方便快捷的利用领域对象层以面向对象的方式对数据库表进行增、删、改、查操作。领域对象本身并不等同于数据库中的表,但就大多数应用系统来说,一个领域对象往往都映射为数据库中对应的二维表。本系统领域对象层的类如表1所示,类中为每个属性(成员变量)提供了getter和setter方法。

5  领域对象的持久化实现

持久层的功能包含两个方面:一方面将领域对象持久化到数据表中;另一方面需要从数据库表中加载数据并实例化为领域对象。在使用Hibernate进行持久化时,从实体类到表的具体映射规则用配置文件进行描述,一个实体类对应1个映射配置文件,通常映射配置文件命名为:实体类名.hbm.xml,比如Authority的映射配置文件为Authority.hbm.xml。Authority类有id、name、displayName等3个属性,其配置代码如下:

在上述映射配置文件中,使用table指定了Authority实体类对应映射到关系数据库中的表名,id标签用来描述表的主键,property标签用于对普通属性进行配置。与数据库的设计中存在联系表相对应的是,应用系统中的对象很少是孤立存在的,实体对象之间是存在某种关联关系的,这种关联关系表现为3类:1对1、1对N及N对N。比如用户实体类User和权限实体类Authority就是一种N对1的关联关系。同时,因为实体对象间的访问方向的不同,Hibernate将实体间的关联关系进一步细分为单向1对1关联、单向1对N关联、单向N对1关联、单向N对N关联、双向1对1关联、双向1对N关联以及双向N对N关联等7种。在hibernate映射配置文件中,1对1关联使用one-to-one标签配置、N对1关联使用many-to-one标签配置、1对N关联使用one-to-many标签配置、N对N关联使用many-to- many标签配置;单向关联只需要一端实体配置即可,而双向关联关系两端的实体需要同时配置。本系统将实体类User和权限实体类Authority配置为单向N到1的关联,即从User端可以访问Authority对象,但从Authority端无法访问User对象。User实体类的映射配置文件描述如下:

映射文件中的class标签完成了对持久化类的配置,但此时仍无法操作数据库,Hibernate需要连接数据库的相关信息,比如:数据库url、驱动、登陆用户名和密码等。Hibernate框架使用名为hibernate.cfg.xml的配置文件来配置这些信息。配置文件的结构如下:

hibernate使用Session管理持久化对象以便将对象状态同步到数据库中,Session是由SessionFactory工厂创建的会话。SessionFactory是数据库编译后的内存镜像,负责初始化Hibernate,一个应用对应一个SessionFactory,其充当数据存储源的代理。SessionFactory对象由Configuration对象生成,Configuration类调用configure()方法加载hibernate.cfg.xml文件。实现将一个实体对象由瞬态转换为持久化状态即往数据库中插入一个User对象,Session提供了两个方法:Serializable save(Object object)和void persist(Object object)。User对象的持久化代码如下所示:

此外,Session提供了一系列持久化对象的操作方法,包括:加载持久化对象方法:Object load(Class theClass,            Serializable id)和Object get(Class clazz, Serializable id);更新持久化对象的方法void update(Object object)和Object merge(Object object);删除持久化对象的方法void delete(Object object)。使用这些方法就可以实现对持久化对象的增删改查操作了,这些操作完全是面向对象的,无需考虑繁杂的关系数据库的基本结构。

6  结语

在本案例中,使用Hibernate框架构建web应用,开发人员可以采用面向对象的方式来进行开发。Hibernate实现了POJO到数据库表的映射,应用Hibernate的查询语言HQL及延迟加载等功能,极大的减少了开发时使用SQL和JDBC处理数据的时间,降低了开发难度。同时,应用Hibernate框架实现了数据持久化对象与业务逻辑分离、关系数据库与数据持久化对象的分离,完美解决了应用系统开发中的低耦合问题。案例表明,Hibernate框架在实现复杂业务系统时能极大提高开发效率和系统的可维护性,增强了系统的扩展性。

参考文献

[1] 戴敏斐,齐开悦,陈剑波,等.基于Web2.0的个性化广告推介建模研究[J].计算机应用与软件,2010,27(1):183-186.

[2] 郭涛,曹建,安晨光,等.基于BS架构的DGA在线监测数据平台设计与实现[J].计算机应用与软件,2014,31(8):82-85.

[3] 蔡学焘.hibernate开发及整合应用大全[M].北京:清华大学出版社,2006.

[4] 李刚.轻量级Java EE企业应用实战[M].北京:电子工业出版社,2013.

[5] 陈晓晖,姚宇明,郑明华.基于Struts和HIBERNATE架構的保险公司核心业务系统[J].计算机工程,2006,32(4):264-268.

[6] 冯润民.基于SSH的高校学术管理系统设计与实现[J].计算机工程,2009,35(6):280-282.

[7] 丁夷,金永贤. 基于Struts+Spring+Hibernate框架的手机图书馆服务系统[J].大学图书馆学报,2011,29(1):77-82.