一种简捷的数据持久层解决方案

时间:2022-10-19 11:21:43

一种简捷的数据持久层解决方案

摘 要: 针对目前使用Hibernate技术来实现数据持久层存在繁琐的映射文件配置、不灵活的数据访问等问题,提出一种基于Spring JDBC来实现数据持久层的方案,并结合实际应用系统的开发,详细论述了其具体实施过程。实际开发证明,该方案是切实可行的,它不仅避免了映射文件配置,而且能简单快捷、灵活高效地完成数据持久层任务,并能与上下层次有机融合,较好地满足了多层Web应用系统的需求。

关键词: 数据持久层; Spring JDBC; Hibernate技术; 映射文件配置; 多层Web

中图分类号: TN911?34 文献标识码: A 文章编号: 1004?373X(2016)14?0084?03

A simple solution for data persistence layer

LIANG Bi

(College of Computer, Sichuan University of Arts and Science, Dazhou 635000, China)

Abstract: In view of the problems existing in the data persistence layer that is implemented by Hibernate technology, such as cumbersome configuration of mapping file and inflexible data access, a simple solution based on Spring JDBC to realize data persistence layer is proposed in this paper. The process of its implementation is discussed in detail by combining with the development of practical application system. The actual development proves that the solution is feasible. It can avoid the configuration of mapping file, and it is also simple, fast, flexible and efficient to complete data persistence layer tasks. In addition, it can integrate with upper layer and lower layer, and can better meet the need of multi?layer Web application system.

Keywords: data persistence layer; Spring JDBC; Hibernate technology; mapping file configuration; multi?layer Web

0 引 言

数据持久层是经典Web应用程序三层架构中非常重要的一层,它用来解决面向对象应用程序向关系数据库存储数据时数据类型不一致的问题,即ORIM (Object Relation Impedance Mismatch)问题[1]。其基本的解决方法是使用ORM(Object Relation Mapping)思想,该思想注重利用元数据将数据在对象与关系之间来回映射,从而确保数据访问代码不直接侵入域对象类。目前已经有许多ORM 框架技术,如iBATIS,Hibernate及JPA等,并且Hibernate以其轻量级、纯粹的面向对象编程理念等优势成为目前主流的持久化实现工具[2]。

然而,由于Hibernate对JDBC封装得过于完整,导致开发人员无法灵活使用JDBC的原生SQL,所以其没有JDBC直接访问关系数据库效率高;同时Hibernate遵循ORM原则,导致映射文件配置过于复杂,当遇到大型项目时映射文件和面向对象代码是非常庞大且繁琐,这直接影响到Web系统的性能及维护;而且Hibernate处理批量数据时较弱,对于批量数据的修改和删除不适合用Hibernate来完成。针对Hibernate这些缺陷,本文提出了一种基于Spring JDBC的数据持久层解决方案,并将其应用于可移动文物管理系统持久层部分。

1 Spring JDBC

Spring是目前流行的轻量级一站式企业应用程序解决方案,它以一种统一的方式对持久化数据访问提供支持,并将数据持久化中固定格式的代码封装为Spring JDBC,因而Spring JDBC本身就是对JDBC轻量封装,它由Core,Datasource,Object和Support四个不同包组成,其中最重要的是Core包,它提供了核心功能的类,并且JdbcTemplate是该Core包中最重要的类[3]。

JdbcTemplate类通过提供相应的模板和辅助类来完成对数据的CRUD操作,进而解决了传统JDBC对数据库的繁琐操作以及代码重复的问题;它替开发人员完成了资源的创建以及释放工作,从而简化了对JDBC的使用;它还可以帮助开发人员避免一些常见的错误,比如忘记关闭数据库连接等;而且JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给开发人员的应用代码[4]。它还可以完成SQL查询、更新以及调用存储过程,可以对ResultSet进行遍历并加以提取等。并且,得益于Spring良好的隔离设计,JDBC封装类库可以脱离Spring Context独立使用[5],其架构如图1所示。

2 简捷数据持久层方案研究

2.1 数据持久层方案设计

源于传统的Web应用程序三层架构,将数据持久层从业务逻辑层分离出来,使其处于业务逻辑层和关系数据库层之间,这样持久层相当于“桥梁”角色,然后采用Spring JDBC来实现,其具体方案设计[6]如图2所示。

由图2可见,由于业务逻辑层的Java应用程序必须通过JDBC来访问关系数据库中的数据,因此持久层本质上实现了对传统JDBC API的封装,同时它还实现了数据类型由Java面向对象类型向标准的SQL类型的转换,进而实现了高质量的对象关系转换工作,从而有效解决了对象关系阻抗失配问题。而这些任务当前由Spring JDBC来完成。它通过借助JdbcTemplate模板类使开发人员能够更加专注于数据访问的具体逻辑,而不会再关注数据资源管理及异常处理等,这不仅简化了JDBC的使用,且在一定程度上减少了错误的发生,同时也使数据持久化操作变得更加简捷灵活。

2.2 数据持久方案实现

本数据持久层是基于Spring JDBC来实现的,因此需要创建VO值对象及DAO接口,并通过DAO来持久化VO。其中,VO专门用来封装持久层对象的数据,它通过POJO类来具体实现;DAO则用来抽象和封装对关系数据库中数据的访问操作,并形成统一接口对外提供服务,同时隐藏操作关系数据库的实现细节,进而有效实现业务逻辑层与数据库层的松耦合[7]。DAO本身管理着与关系数据库的连接,内部封装了JDBC数据操作、事务处理等API。Spring框架为JDBC的DAO提供了JdbcDaoSupport支持类,使用该类能够更加简化JDBC操作,因为在JdbcDaoSupport中已经提供了JdbcTemplate的变量,只要自定义类继承JdbcDaoSupport就可以直接调用JdbcTemplate相关的方法来实现数据的持久化[8]。

在实际开发中,首先需要定义DAO接口,该接口对外提供CRUD操作方法;然后定义DAOImpl实现类,该类需要实现DAO接口并继承JdbcDaoSupport,通过调用JdbcTemplate相关的方法(如update,mapRow等)来完成对关系数据库中数据的具体操作任务[9]。业务逻辑层只需调用DAO接口中对外提供的方法,而不需要关心DAO的具体实现细节,这样有利于Web应用程序在不同的持久层技术之间切换,进而增强了系统开发的灵活性和有效性。ApplicationContext.xml配置文件中除了统一配置数据源及事务之外,还需要配置业务逻辑Bean,数据持久DAOImpl,并通过DI为DAOImpl注入Factory,为业务逻辑Bean注入DAOImpl,这样有机地完成Web应用程序中各Bean组件的组装和集成。

3 简捷的数据持久层方案应用

文物是人类在历史发展过程中遗留下来的遗物、遗迹,它是人类宝贵的历史文化遗产[10]。随着新文物的出土和发现,以及新技术的引进,传统的文物管理方式已无法满足当今文物管理的需要,开发一个响应速度快、拓展性强和维护性好的可移动文物管理系统非常必要,通过它来管理已经向外公开的可移动文物,让更多的人对它们有所了解和认识,进而推进文物的普及工作。为了快捷实现该系统的数据访问,增强用户体验,将所提出的数据持久层方案应用到本系统的持久层部分,具体实施过程如下:

3.1 环境搭建

环境搭建是具体使用某种框架技术最重要的一步,在此过程中根据不同框架技术所完成的具体工作不一样,但一般都有导入相关的Jar包,创建和配置相关文件,并进行框架的初始化等工作。由于Spring JDBC使用相对简单,因此在可移动文物管理系统持久层部分的环境搭建中,只需进行相关Jar包的导入即可,如导入spring.jar,commons?logging,commons?dbcp.jar,commons?pool.jar,commons?annotation.jar和jtds?1.2.jar等。

3.2 配置ApplicationContex.xml

ApplicationContex.xml文件是整个可移动文物管理系统的基础,它所起的作用至关重要,其能将本系统的持久层、业务逻辑层及其他各层有机的融合在一起,并实现对系统中所有Bean的有效管理。ApplicationContex.xml在本系统持久层部分主要完成数据源配置、事务配置及其他一些初始工作,用于保证Spring JDBC正常完成该系统VO的持久化任务,其关键配置如下:

3.3 创建VO值对象

一个VO通过一个简单的Java对象即POJO来实现,一般情况下,一个POJO就表征了与数据表里某条记录相对应的实体,它由实体的一些属性及属性的访问方法组成,其中除了无意义的主属性只能被获取外,每一个属性都对应着两个外部对象访问的方法,即get()和set()。本可移动文物管理系统相关的POJO有User.java,Admin.java,CulturalRelic.java,Picture.java,Video.java,Msg.java和News.java等,其中3.4 创建DAO接口及实现类

根据本文所提出的数据持久层方案,使用DAO设计模式来完成可移动文物管理系统持久层任务。DAO模式的实现包括DAO接口和DAOImpl实现类。其中,DAO接口负责声明访问特定POJO所对应的抽象业务逻辑方法,DAOImpl实现类则负责使用Spring JDBC封装的JdbcTemplate来具体实现DAO接口中声明的抽象方法,这样可以减少组件间的耦合度。在本系统中,创建的DAO接口有UserDAO.java,AdminDAO.java,CulturalRelicDAO.java,PictureDAO.java,VideoDAO.java,MsgDAO.java和NewsDAO.java等,然后通过调用JdbcTemplate提供的方法对这些DAO接口进行实现。其中CulturalRelicDAO的实现类CulturalRelicDAOImpl里删除可移动文物的方法核心代码如下:

4 结 语

本文使用Spring JDBC来设计和实现了Web应用程序中的数据持久层,并将其应用于可移动文物管理系统持久层部分,解决了目前主流的Hibernate在完成持久层任务时所遇到的一些问题。通过实际应用开发证明,该持久层方案是正确可行的,且具有如下三方面特征:

(1) Spring JDBC通过借助JdbcTemplate可以执行对关系数据的CRUD操作,不仅代码简单、容易编写,而且相对于Hibernate对JDBC全封装模式更为灵活。

(2) Spring JDBC继续了以前JDBC的SQL访问方式,不需要在HQL和SQL之间相互转换,可以直接操作关系数据库,进而提高了数据访问速度,增强了用户体验。

(3) 该方案没有*.hbm.xml映射文件繁琐配置,避免了运行时产生大量的冗余数据存放于内存,进而提高了系统性能以及系统的开发效率。总的来讲,基于Hibernate技术实现Web应用程序中的数据持久层已出现较多问题,而通过Spring JDBC来完成数据持久层任务,具有简单、快捷、灵活及高效等特性,因此值得进一步推广使用。

参考文献

[1] 闫宏印,张卫争,刘超慧.开源框架下Web应用分层的设计与实现[J].计算机工程与设计,2008,29(23):6023?6025.

[2] 夏斌,李志蜀.基于Hibernate框架的数据持久层的研究及应用[J].计算机应用,2008(9):2446?2448.

[3] Spring Reference Documentation. Introduction to the Spring framework [R]. [S.l.]: Spring Reference Documentation, 2015.

[4] Spring JDBC Reference Documentation. Introduction to the Spring JDBC [EB/OL]. [2013?12?24]. http://docs.spring.io/spring?data/jdbc/docs.

[5] 张俐,张维玺.基于Spring和JDBC的蔬菜运销管理系统在数据持久层的应用[J].安徽农业科学,2012(7):4401?4403.

[6] 张少应,程传旭.基于Hibernate持久化层的设计与实现[J].计算机技术与发展,2014(12):101?104.

[7] 刘德山,杨彬彬.基于Hibernate框架的数据持久层架构设计及应用[J].微型机与应用,2011,30(15):12?14.

[8] 高剑,朱程荣.Spring框架在数据持久层的应用研究[J].微机发展,2005,15(11):106?108.

[9] 张俐.基于JavaEE的电信CRM数据持久层的实现[J].计算机工程,2009,35(6):41?43.

[10] 梁弼,刘笃晋,肖丽利.基于五层架构的不可移动文物数字化平台构建研究[J].计算技术与自动化,2014,33(4):115?118.

上一篇:谈谈如何纠正学生作业中的错别字 下一篇:吃透课改探策略抓活课堂求高效