ORM 技术在系统快速开发中的应用研究
叶长春,杨春金
武汉理工大学 信息工程学院,武汉 湖北 430063
摘 要: 本文介绍了Struts和Hibernate两个开源框架,提出了基于这两种框架的集成架构,
给出了该架构的工作流程,并结合实例代码说明如何利用集成架构进行开发。
关键词: 框架; Struts; Hiberante;
中图分类号:文献标识码:A 文章编号:
随着Internet技术的飞速发展,应用系统的体系结构从C/S 结构向更加灵活的B/S体系
结构演变, 因其具有易用性和良好的可扩展性等优点而迅速发展成为Web 应用系统的主流,
基于B/S 结构的Web 架构在逻辑上将应用分为4 层: 表示层、业务逻辑层、持久层和数据层。
这种多层的体系结构向开发者提供了一种基于组件的设计和开发Web应用的模块化方法, 应
用系统各层的实现技术多种多样, 每种技术各有优缺点和适用范围, 怎样选择各层的技术以
及如何结合这些技术来实现快速、高效地开发一个应用系统是一个值得深入研究的方向, 本
文采用Struts 框架[1]实现表示层,Hibernate 实现持久层[2], 构建了一个结合两者优势的Web
应用集成框架, 并对框架的优缺点进行分析。
框架
Struts是基于MVC的Java Web 应用框架[3],它把Java Web应用分为模型、视图和控制器
三层。视图层由一组JSP文件构成,模型层由实现业务数据和业务逻辑的JavaBean或EJB组建
构成,控制器由ActionServlet 和Action以及来实现。
Action
Action
Action
(控制器)
ActionServlet
(视图)
JSP
Web
服务器浏览器
模型
JavaBean
EJB
Servlet/JSP容器
图1 Struts实现MVC框架
Struts框架提供了丰富的JSP 标签库支持应用程序的开发,而且引入了A c t i o n F o r m
组件(实质为JavaBean)作为用户表单的封装来完成数据的传输。
控制层的配置文件配置了各种用户请求及对应的具体业务逻辑组件
来供ActionServlet 类进行处理。ActionServlet 类是中心Servlet,负责处理各种用户请
求,它将根据配置文件将用户请求映射到具体的Action 类;而当Action
类调用模型组件处理好用户请求,并返回处理结果交给ActionServlet类, ActionServlet
- 1 -
类根据配置文件将结果转发到视图提供给用户,或者转发另外一个
Action 做进一步处理。Action 类实现了具体的业务逻辑,它接受用户的输入,然后调用具
体的模型组件来处理用户请求。但是,Struts框架对模型——即复杂的数据持久化层没有提
供太多的支持,所以必须选择合适量级的持久化技术,比如Hibernate 、EJB 等等。Struts
框架实现了MVC 设计模式,但是它是典型的表现层框架,对模型的实现是不足的,所以有必
要引入其他架构加强对模型的实现。
2. 数据持久层及 Hibernate 框架
在企业应用程序开发中,要求将业务数据进行永久存储,以便在应用程序下一次执行时
使用。但是关系型数据库技术的成熟和面向对象技术广泛应用[4],它们之间的矛盾也逐渐突
出。而数据持久层就是要在对象—关系数据库之间提供一个成功的企业级别的映射解决方
案,尽最大可能弥补这两者之间的差异。
Hibernate 是一个数据持久层框架[5],是一款优秀的ORM(Object elation Mapping)中
间件,它不仅提供了从Java 类到数据表的映射,也提供了数据查询和恢复等机制。相对于
使用JDBC 和SQL 来手工操作数据库,使用Hibernate可以大大减少操作数据库的工作量。它
是通过一个“映射文件”把值对象和数据库表之间建立起一个映射关系,这样,只需要通过
操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。由于
Hibernate 对JDBC 进行了轻量级的对象封装,Hibernate 的Transaction实际上是底层的
JDBC Transaction 的封装,这样简化了数据持久层的开发与调试,减少了程序员的90%以上
的工作量。Hibernate还可以与多种Web服务器、应用服务器良好集成,并且支持几乎所有流
行的数据库服务器。
3 .整合 Struts 和 Hibernate 集成架构的工作流程
基于Struts和Hibernate框架总体架构[6]设计如下图:
客户端浏览
视图
JSP TagLib
ActionServlet ActionForm
Action excute()
业务逻辑模块接口
Hibernate框架
关系数据库
图2 系统总体架构
视窗(View)的实现
表示层基于Struts 框架,采用了JSTL 标签库技术。在表示层的设计中,JSP 技术仅用
于显示用户界面,发送Struts 请求和接受响应完成交互,实现显示和业务逻辑的解耦。该
- 2 -
层设计中,J S T L 标签的使用简化了JSP 页面,使页面设计和表示层业务逻辑分离,提高
了应用程序的可维护性。
控制层的实现
客户端通过Http把请求送到Struts 框架中的控制器ActionServlet 等候处理。Action
Servlet 会通过查找 配置文件实现请求(*.do)到业务逻辑(Action)的映
射,所有的业务逻辑封装在Action 中。ActionServlet接受客户端的请求, 并将请求交与
RequestProcessor进行处理,根据请求的URL从ActionMapping 中得到相应的Action 并根据
请求的参数实例化相应的ActionForm, 再进行form 验证验证;通过则调用Action的Execute
方法,在方法体内, 调用业务逻辑模块.
业务逻辑及持久层的实现
模型层及持久层的实现模型层负责封装数据持久层提供的数据对象,并为表现层提供功
能接口,由业务组件实现。该层的数据来源于数据持久层的持久化对象和表现层的FormBean,
是表现层与数据持久层进行数据通信的中介层。首先建立接口业务接口PersonOperate提供
了添加、删除、修改等行为;然后使用业务接口PersonOperate通过Hibernate 来实现这些
行为。通过接口与实现的分离可以使程序层次明晰,当我们在以后的应用如需要新的功能时
也能很方便的扩充接口,主要的代码如下:
public class PersonOperate {
// 在Hibernate中,所有的操作都是通过Session完成
// 此Session不同于JSP的Session
private Session session = null ;
// 在构造方法之中实例化session对象
public PersonOperate()
{
// 找到Hibernate配置
Configuration config = new Configuration().configure() ;
// 从配置中取出SessionFactory
SessionFactory factory = () ;
// 从SessionFactory中取出一个Session
= () ;
}
// 所有的操作都是通过session进行的
// 向数据库中增加数据
public void insert(Person p)
{
// 开始事务
Transaction tran = () ;
// 执行语句
(p) ;
// 提交事务
() ;
// 关闭Session
() ;
}
}//修改数据库数据
- 3 -
……//删除数据库数据……}
这个Person对象,即持久化对象类,它的值是通过H i b e r n a t e 的映射文档
映射到数据库中相应的数据表。每个数据库表都会对应一个Hibernate映射
文件,用于生成数据模型。映射文档说明了持久化类与关系数据库表的映射关系,也体现了
关系数据库表之间的关联关系。
Person的部分映射关系如下:
<hibernate-mapping>
<class name="" table="person"
catalog="sampledb">
<id name="id" type="string"><column name="id" length="32" />
<generator class="assigned" /></id>
<property name="name" type="string"><column name="name"
length="20" not-null="true" /></property>
<property name="password" type="string"><column name="password"
length="20" not-null="true" /></property>
<property name="sex" type="string"><column name="sex" length="2"
/></property>
<property name="email" type="string"><column name="email"
length="30" /></property>
</class>
</hibernate-mapping>
由上可见,Hibernate与传统访问数据库的SQL 语句相比,简单的代码就能实现数据持
久化,大大减少了操作数据库的工作量,并且更加易于维护。
Hibernater的数据库连接配置。在src 目录下创建名为 的配置文件,
并且将它的路径添加到应用的类路径中就可以完成Hibernate的配置。该配置文件由
Hibernate用来连接到数据库、生成模式和获得其它特定数据库信息的属性组成。要将底层
数据库内的变动映射到整个应用,只需要修改该文件内的属性值。该配置文件的内容如下
( 数据库使用MySQL为例子):
<hibernate-configuration>
<session-factory>
<property name="">MySQL</property>
<property name="">
jdbc:mysql://localhost:3306/sampledb
</property>
<property name="">root</property>
<property name="">sa</property>
<property name="_class">
</property>
<property name="dialect">
</property>
<property name="show_sql">true</property>
<mapping resource="com/andrew/hibernate/demo1/" />
</session-factory>
</hibernate-configuration>
4. Struts 和 Hibernate 集成框架的特点
- 4 -
基于这两个开源框架的架构在开发中得到广泛的应用, 主要有以下几方面的原因:
第一, 免费、开源、有丰富的文档和稳定的开发背景;
第二, 层次之间松散耦合便于实现系统的大规模开发和管理;
第三, 基于模块的结构利于系统业务的重用和改动;
第四, 良好的设计思想。Struts 是基于MVC 的框架, 很好地把业务逻辑和表示层分离。
Hibernate 是一个小巧的实现对象关系映射的工具, 把面向对象的设计开发与关系数据
库联系起来了。当然, 基于这两种框架的架构也并非没有缺点, 如Struts 中的Action 的映
射非常复杂; Hibernate 的对象、关系之间的映射工作量很大; 两者的配置文件都很复杂等
等。其实, 这正是其灵活之处。因为把各层都完全分离了所以才易于重用和可扩展, 因而其
灵活映射的配置文件才会很复杂。而且现在有很多的工具为这两个配置文件提供了可视化的
界面,很好的支持这两种框架相结合进行快速的系统开发。
5. 结论
整合Struts 框架和Hibernate 框架[7]去构建Web 应用开发框架, Web 应用的表示层由
Struts 框架来实现, Hibernate 完成了对象和关系之间的映射, 从而实现业务层和数据库
层之间的交互, 在很大程度上简化了程序员在数据库逻辑方面的工作, 让Java 程序员能够
使用面向对象编程的思维来操作数据库, 这两种技术的结合充分发挥了两者的优点, 基于二
者的Web 应用框架开发简洁、结构清晰、快速、高效, 有很好的可扩展性和维护性, 非常
适合于面向对象的设计与开发。通过成熟的开源产品搭建层次清晰性能稳定的系统架构。
参考文献:
[1] 孙卫琴.精通 Struts:基于 MVC 的 Java Web 设计与开发 北京:电子工业出版社,2005:229-251
[2] 程祥. Struts、Hibernate 和 Spring 的轻型 J2EE 架构的研究[J]. 电脑编程技巧与维护 , 2007,(04)
[3] 黄烟波, 张红宇, 李建华. 基于 Struts 和 Hibernate 的 J2EE 架构[J]. 计算机时代 , 2004,(10)
[4] 徐长盛, 戴超, 谢立. 一种快速开发 Web 应用程序方法的研究[J]. 计算机工程与设计 , 2004,(12)
[5] 张国平, 万仲保, 刘高原. 基于轻量级 J2EE 框架信息发布系统的设计与实现[J]. 华东交通大学学报,
2007,(01) .
[6] [刘卫国,谢华,蔡立燕. 基于 Struts 与 Hibernate 的网络教学平台的设计与实现[J]教育信息化 ,
2006,(07) .
[7] 吴海生, 方健, 朱金燕. 基于 Struts+Hibernate 架构的 E-Learning 平台研究与实现[J]. 电脑知识
与技术(学术交流) , 2007,(08)
Application and Research of ORM Technology in Rapid
Development System
Ye Changchun, Yang Chunjin
Wuhan University of Technology School of Information Engineering wuhan 430063
Abstract
This article introduced two open-source frameworks,Struts and Proposed a integrated
architecture that it was put forword based on these two frameworks,Analysised the work process of the
intergrated architecture,at last listed a example to explain how carried on the rapid development using
the integrated construction.
Keywords: Frameworks; Struts; Hiberante;
- 5 -
参考文献: