Hibernate框架持久化应用及原理探析
2017-02-18温立辉
摘 要:针对Web应用开发中如何高效的与存储层交互问题,讨论了Hibernate框架的持久化机制以及实现原理,阐述Hibernate框架的适用场景;同时讨论ORM的思想原理,最后说明Hibernate框架在Web开发中的重要作用。
关键词:ORM;持久化;实体;事务;映射
前言
Hibernate框架最初是由一个名字为Gavin King的程序员,在2001年根据自己对ORM思想的理解,构建出来的一个Java持久化应用。在推出第一版后,很快得到了编程界的广泛关注,并随后被JBoss公司收购,从此Hibernate框架不断推陈出新,在Java EE持久化领域独占熬头。
1 Hibernate框架应用
Hibernate作为一个持久化框架,其底层对JDBC的API进行了封装,并在上层把自身的API暴露给应用程序业务层的一种全自动类型的持久化框架。其之所以能风靡编程界,与其自身的特性密切相关。
(1)Hibernate框架提供多个级别的缓存来加快数据的读写速度,如:一级的Session缓存、二级的插拔缓存。
(2)Hibernate框架的API及HQL语句具有开发性,能够在不同的关系型数据库中通用,可以实现一次编写,随处运行的思想。
(3)Hibernate框架的实体类中,只要求有对应的set、get方法,而无须引入其它类,因而它是一种非入侵的开发方式。
2 ORM原理与实现
ORM也叫对象关系映射(Object Relation Mapping),是面向对象语言操作持久层的一种有力工具。因面向对象语言与关系数据数据库的交互存在一定的障碍,作为ORM的职责就是在它们中间建立一个交互的渠道,以方便程序与数据层的通信。
ORM的实现方式有很多种,Hibernate是其中的一种开源实现方式,具体实现过程如图1所示。通过ORM插件的映射API及XML映射规则,面向对象语言域模型中的业务实体最终变成关系数据库中的数据表,对象将成为表中记录,属性将映射成表中的字段。应用程序将通过Hibernate框架的HQL语句及实体对象与ORM插件模块进行通信,而关系数据库则通过SQL语句及数据关系与ORM插件模块交互。
3 Hibernate框架组件
Hibernate框架的ORM运作机制以及跨数据库平台执行能力是通过五大核心组件支撑起来,如图2所示。
Configuration接口:从配置文件hibernate.cfg.xml与实体映射文件*.hbm.xml文件中读取相应的配置信息,负责程序运行环境初始化,并构建BeanFatory实例。
SessionFatory接口:代表关系数据库中的逻辑数据源,为重量级组件,一个实例代表一个逻辑库,不能随意创建及销毁。
Session接口:代表关系数据库的连接,轻量级组件,从SessionFatory接口中可取得此实例,该实例中有对关系数据库增、删、改、查的操作API。
Query接口:框架中所有通过HQL语句去操作关系数据库时,都必须通过此组件来实现,从Session接口中取得该实例。
Transaction接口:框架的事务管理接口,所有对关系数据库的写操作都必须在框架中开启事务,否则不会提交到数据库存储层。
4 Hibernate对象管理
当应用程序通过Hibernate API与关系数据库交互时,持久化框架内的实体对象存在着如图3所示生命周期管理过程。
当业务实体对象被通过new的方式刚刚创建时,这时实体对象还未与任何持久化机制发生关联,与普通的JavaBean对象完成一模一样,此时实体对象的状态称之为临时状态,也叫瞬时状态。
当实体对象进入Hibernate的Session缓存时,此时的对象已经跟持久化机制发生关联,实体对象则处于持久化状态。
当实体对象已经变成关系数据库数据表中的某条记录时,且已不存在Session中,此时则称实体对象处于游离状态或脱管状态。
实体对象的状态可以通过框架API的中方法,在三种状态中进行相互的转换。在临时状态下,通过save方法可以使对象变成持久化状态,在持久化状态下则可以通过delete方法,使对象重新返回到临时状态中。在持久化状态下,则可以通过close、clear等方法使对象变成游离状态,反过来,通过lock、update等方法则可以使对象的状态从游离形式返回到持久化形式。在游离状态下,还可以通过delete方法,直接使对象返回到临时状态。
5 结束语
Hibernate框架是一个持久层的优秀框架,同时也是一个主流的ORM工具,其可以让开发人员以对象思维操作关系型数据库,让编码过程变得更加简洁、高效。但其也存在一定不足,如,數据库特性功能被抹杀,不支持批量操作等,以上是可以进一步完善的方面。
参考文献
[1]张少应,程传旭.基于Hibernate的对象关系映射研究[J].电子设计工程,2016,24(6):128-130.
[2]宫生文,王宁.Hibernate作为J2EE数据持久层的分析和研究[J].计算机与信息技术,2006(4):36-38.
[3]卞林,郑中华,唐晓新.一种基于Hibernate的并行查询方法[J].电子技术与软件工程,2016(7):181-183.
[4]温立辉.Java EE编程技术[M].北京:北京理工大学出版社,2016:125-155.
[5]王琦,袁鹏博,陈义明.Hibernate对象管理研究[J].电脑知识与技术:学术交流,2014(12):8165-8166,8169.