基于Spring+SpringMVC+hibernate框架的Web系统设计与实现

2018-12-18 10:16朱运乔
电脑知识与技术 2018年26期

朱运乔

摘要:首先对Spring+SpringMVC+hibernate框架模型作了简单介绍,对其结构组成和基本工作原理进行了简要分析。然后以一个商品出库系统模块的为例,展示了如何使用Spring+SpringMVC+hibernate框架搭建层次清晰的程序结构。并给出了商品出库模块在该框架下的功能实现和关键代码。

关键词:Spring;SpringMVC;hibernate;Web系统;功能实现

中图分类号:TP311.52 文献标识码:A 文章编号:1009-3044(2018)26-0066-03

1 概述

当前,JavaWeb开发技术繁多,但为开发团队选择一款优秀的框架非常重要,一个好的框架决定了开发团队的软件开发周期、开发成本、维护成本甚至于软件的生命周期。在选择一个可行的方案时,一般要从稳定成熟性、可扩展性及灵活等多方面综合考虑。本文将以一个商品出库模块为例,详细介绍由Spring、SpringMVC、hibernate几种技术构成的軟件架构的搭建技术要点和以此为平台的功能模块实现过程。

2 Spring+SpringMVC+hibernate技术架构

Spring+SpringMVC+hibernate不同于之前流行的Spring+struts2+hibernate(ssh2)技术架构,该架构是将后者最重要的前端控制部分struts2(mvc)替换成用SpringMVC,同时将Spring和hibernate多种开源技术有机结合在一起,从而构建出一个健壮可靠、高效成熟的JavaWeb应用程序技术架构。

2.1 SpringMVC简介

SpringMVC是当前非常流行的一种MVC框架,而MVC是我们开发WEB应用程序的通用框架,MVC的核心思想是业务逻辑和业务数据呈现相分离,使程序分层、分工合作,既相互独立,又协同合作。其中:

M(Model):业务逻辑的描述和业务数据的信息表示。

V(View):为用户呈现数据的页面。

C(Controller):调用模型层(Model)的业务逻辑产生合适的数据模型,同时传递数据模型给视图层(View)呈现给用户。

Spring MVC是一个设计优良的MVC框架,是Spring下的一个开源项目,可以跟Spring无缝接合,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高,实现了对Struts 2的超越。现在越来越多的开发团队选择了Spring MVC。

2.2 Hibernater的作用

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以使用对象编程思维来操纵数据库。

2.3 Spring框架的作用

Spring框架是系统的核心部分,系统各部分的整合由它来完成。Spring提供的Ioc容器是业务逻辑组件和DAO组件的工厂,它负责生成并管理这些实例。

借助于Spring的依赖注入,各组件以松耦合的方式组合在一起,组件与组件之间的依赖正是通过Spring的依赖注入管理的。其Service组件和DAO对象都采用面向接口编程方式,从而降低了系统重构的成本,极好地提高了系统的可维护性、可扩充性。

事务管理采用Spring的声明式事务框架,通过声明式事务,而只需要容器中加以配置,在业务逻辑层中加上相应的注解即可,使业务组件只专注于业务本身,从而简化了开发。

一个典型的使用了Spring+SpringMVC+hibernate架构的应用,其结构如下图所示。

由图所示,SpringMVC实现整体结构及前端控制,Hibernate主要负责数据访问,Spring负责将各大组件粘合在一起组成一个完整的软件架构。

3 系统实现

下面以一个商品出库模块为例来展现Spring+SpringMVC+hibernates架构的具体设计与实现。

3.1 功能描述

商品出库模块首先由商品出库界面(outwarehouse.jsp)提交出库表单请求(/outwarehouse)到控制器,请求方法根据出库表单数据调用业务逻辑层,由业务逻辑层返回的信息决定返回哪个视图:如出库失败,返回error.jsp显示出错原因;如出库成功,返回showResult.jsp页面视图,展示成功出库的商品情况。通过showResult.jsp页面可进一步向控制器提交请求(/history),从而获取所有商品的出库历史记录。

3.2 数据库设计

数据库涉及到两个表:商品表(ShopInfo),出库历史表(Storage)。

3.3 关键代码

关键代码涉及四个包:

bean包,主要包含有两个ORM对象(ShopInfo.java、Storage.java)。

dao包,主要包含两个DAO类(ShopInfoDAO.java、StorageDAO.java)。

service.impl包及子包,主要包含业务逻辑接口实现类(ShopInfoService.java、StorageService.java)。

controller包,主要包含控制器(OutwareHouseController.java)。

代码实现过程中用了注解方式创建和注入javabean,下面主要展示主要代码及相关注解。

1) ORM对象ShopInfo.java代码及注解如下:

@Entity //实体注解说明

@Table(name="ShopInfo") //映射表

public class ShopInfo implements java.io.Serializable {

@Id //标识列

@GeneratedValue(strategy=GenerationType.IDENTITY) //标识值自动生成方式

private Integer id;

/*一对多关系注解*/

@OneToMany(cascade={CascadeType.ALL},mappedBy="shopInfo",fetch=FetchType.LAZY)

private Set storages = new HashSet(0);

/*以下其它属性定义*/

}

2) DAO类ShopInfoDAO.java关键代码及注解如下:

@Repository //加载DAO类到spring容器注解

public class ShopInfoDAO {

@Autowired //自动装配sesseionFactory

@Qualifier("sessionFactory")

privateSessionFactorysessionFactory;

/*以下CRUD方法定义*/

}

3) Service接口实现类(ShopInfoService.java)关键代码及注解:

@Service //加载Service类到spring容器的注解

public class ShopInfoService implements IShopInfoService {

@Autowired //spring容器自動装配shopInfoDAO

privateShopInfoDAOshopInfoDAO;

@Override

@Transactional //在业务方法实现加上事务管理注解

/*以下为业务方法定义,每个需要事务管理方法之前加@Transactional注解*/

}

4) 控制器类(OutWareHouseController.java)关键代码及注解如下:

@Controller //加载Controller类到spring容器的注解

public class OutWareHouseController {

@Autowired //spring容器自动装配shopInfoService

privateIShopInfoServiceshopInfoService;

@Autowired //spring容器自动装配storageService

privateIStorageServicestorageService;

@RequestMapping(value="/outwarehouse") //出库请求注解

public String outwarehouse(String shopId,intstorageQuantity,Model model){…}

@RequestMapping(value="/history") //显示历史记录请求注解

public String history(Model model){…}

3.4 配置说明

配置正解如否至关重要,整个系统通过相关配置将各组件有机组织在一起。

1) web.xml主要配置

<!—加载spring容器—>

<!—配置springmvc前端控制器—>

<!— hibernate延迟(LAZY)加载问题的处理,因为在关系映射中用到了延迟加载 —>

openSessionInViewFilter

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

openSessionInViewFilter

/*

2) spring容器配置文件applicationContext.xml

<!— spring可以自动去扫描base-pack下面的包或者子包下面的java文件,

如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean —>

<!—启动事务注解的(@Transactional) —>

bean.ShopInfo

bean.Storage

3) SpringMVC配置文件springmvc-config.xml

<!— spring可以自动去扫描controller包或者子包下面有的@Controller注解的类 —>

<!—启动MVC相关注解 —>

<!—视图解析器 —>

4 结束语

SpringMVC为JAVAWeb应用提供优了性能优异的MVC框架,可扩展性强;Hibernate的ORM对JDBC进行了精美封装,极大地简化了数据持久化操作,提高了编码效率,加速了项目进度;Spring的IoC和aop技术,將各组件以松耦合的方式组合在了一起。三个子框架各司其职,完美结合。本文以一个商品出库模块为例,详细地介绍了Spring+SpringMVC+hibernate架构搭建的技术要点和主要实现过程,虽然是一个最小原型系统,但是该框架扩展性强,易于维护,结合实际的功能需求,分别在Controller层,Service层,持久层等各层面上扩充添加相应的组件,即可实现一个完整系统。

参考文献:

[1] 深入理解Spring MVC 思想[EB/OL]. [2014-07-31]. https://www.cnblogs.com/baiduligang/p/4247164.html.

[2] SpringMVC[EB/OL]. [2018-05-29]. https://blog.csdn.net/luciferlongxu/article/details/80460580.

[3] 何信,杜江,庞海艳.基于SSH2框架的Web系统的设计与实现[J]. 石家庄:统计与管理,2015(1):49-53.

[4] 疯狂软件.Spring MVC+MYBatis企业应用实战[M]. 北京:电子工业出版社,2017.

[通联编辑:王力]