国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Spring+SpringMVC+hibernate框架的Web系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

2018-12-18 10:16朱運(yùn)喬
電腦知識與技術(shù) 2018年26期

朱運(yùn)喬

摘要:首先對Spring+SpringMVC+hibernate框架模型作了簡單介紹,對其結(jié)構(gòu)組成和基本工作原理進(jìn)行了簡要分析。然后以一個(gè)商品出庫系統(tǒng)模塊的為例,展示了如何使用Spring+SpringMVC+hibernate框架搭建層次清晰的程序結(jié)構(gòu)。并給出了商品出庫模塊在該框架下的功能實(shí)現(xiàn)和關(guān)鍵代碼。

關(guān)鍵詞:Spring;SpringMVC;hibernate;Web系統(tǒng);功能實(shí)現(xiàn)

中圖分類號:TP311.52 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)26-0066-03

1 概述

當(dāng)前,JavaWeb開發(fā)技術(shù)繁多,但為開發(fā)團(tuán)隊(duì)選擇一款優(yōu)秀的框架非常重要,一個(gè)好的框架決定了開發(fā)團(tuán)隊(duì)的軟件開發(fā)周期、開發(fā)成本、維護(hù)成本甚至于軟件的生命周期。在選擇一個(gè)可行的方案時(shí),一般要從穩(wěn)定成熟性、可擴(kuò)展性及靈活等多方面綜合考慮。本文將以一個(gè)商品出庫模塊為例,詳細(xì)介紹由Spring、SpringMVC、hibernate幾種技術(shù)構(gòu)成的軟件架構(gòu)的搭建技術(shù)要點(diǎn)和以此為平臺的功能模塊實(shí)現(xiàn)過程。

2 Spring+SpringMVC+hibernate技術(shù)架構(gòu)

Spring+SpringMVC+hibernate不同于之前流行的Spring+struts2+hibernate(ssh2)技術(shù)架構(gòu),該架構(gòu)是將后者最重要的前端控制部分struts2(mvc)替換成用SpringMVC,同時(shí)將Spring和hibernate多種開源技術(shù)有機(jī)結(jié)合在一起,從而構(gòu)建出一個(gè)健壯可靠、高效成熟的JavaWeb應(yīng)用程序技術(shù)架構(gòu)。

2.1 SpringMVC簡介

SpringMVC是當(dāng)前非常流行的一種MVC框架,而MVC是我們開發(fā)WEB應(yīng)用程序的通用框架,MVC的核心思想是業(yè)務(wù)邏輯和業(yè)務(wù)數(shù)據(jù)呈現(xiàn)相分離,使程序分層、分工合作,既相互獨(dú)立,又協(xié)同合作。其中:

M(Model):業(yè)務(wù)邏輯的描述和業(yè)務(wù)數(shù)據(jù)的信息表示。

V(View):為用戶呈現(xiàn)數(shù)據(jù)的頁面。

C(Controller):調(diào)用模型層(Model)的業(yè)務(wù)邏輯產(chǎn)生合適的數(shù)據(jù)模型,同時(shí)傳遞數(shù)據(jù)模型給視圖層(View)呈現(xiàn)給用戶。

Spring MVC是一個(gè)設(shè)計(jì)優(yōu)良的MVC框架,是Spring下的一個(gè)開源項(xiàng)目,可以跟Spring無縫接合,自從Spring 2.5版本發(fā)布后,由于支持注解配置,易用性有了大幅度的提高,實(shí)現(xiàn)了對Struts 2的超越?,F(xiàn)在越來越多的開發(fā)團(tuán)隊(duì)選擇了Spring MVC。

2.2 Hibernater的作用

Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,是一個(gè)全自動的orm框架,hibernate可以自動生成SQL語句,自動執(zhí)行,使得Java程序員可以使用對象編程思維來操縱數(shù)據(jù)庫。

2.3 Spring框架的作用

Spring框架是系統(tǒng)的核心部分,系統(tǒng)各部分的整合由它來完成。Spring提供的Ioc容器是業(yè)務(wù)邏輯組件和DAO組件的工廠,它負(fù)責(zé)生成并管理這些實(shí)例。

借助于Spring的依賴注入,各組件以松耦合的方式組合在一起,組件與組件之間的依賴正是通過Spring的依賴注入管理的。其Service組件和DAO對象都采用面向接口編程方式,從而降低了系統(tǒng)重構(gòu)的成本,極好地提高了系統(tǒng)的可維護(hù)性、可擴(kuò)充性。

事務(wù)管理采用Spring的聲明式事務(wù)框架,通過聲明式事務(wù),而只需要容器中加以配置,在業(yè)務(wù)邏輯層中加上相應(yīng)的注解即可,使業(yè)務(wù)組件只專注于業(yè)務(wù)本身,從而簡化了開發(fā)。

一個(gè)典型的使用了Spring+SpringMVC+hibernate架構(gòu)的應(yīng)用,其結(jié)構(gòu)如下圖所示。

由圖所示,SpringMVC實(shí)現(xiàn)整體結(jié)構(gòu)及前端控制,Hibernate主要負(fù)責(zé)數(shù)據(jù)訪問,Spring負(fù)責(zé)將各大組件粘合在一起組成一個(gè)完整的軟件架構(gòu)。

3 系統(tǒng)實(shí)現(xiàn)

下面以一個(gè)商品出庫模塊為例來展現(xiàn)Spring+SpringMVC+hibernates架構(gòu)的具體設(shè)計(jì)與實(shí)現(xiàn)。

3.1 功能描述

商品出庫模塊首先由商品出庫界面(outwarehouse.jsp)提交出庫表單請求(/outwarehouse)到控制器,請求方法根據(jù)出庫表單數(shù)據(jù)調(diào)用業(yè)務(wù)邏輯層,由業(yè)務(wù)邏輯層返回的信息決定返回哪個(gè)視圖:如出庫失敗,返回error.jsp顯示出錯原因;如出庫成功,返回showResult.jsp頁面視圖,展示成功出庫的商品情況。通過showResult.jsp頁面可進(jìn)一步向控制器提交請求(/history),從而獲取所有商品的出庫歷史記錄。

3.2 數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫涉及到兩個(gè)表:商品表(ShopInfo),出庫歷史表(Storage)。

3.3 關(guān)鍵代碼

關(guān)鍵代碼涉及四個(gè)包:

bean包,主要包含有兩個(gè)ORM對象(ShopInfo.java、Storage.java)。

dao包,主要包含兩個(gè)DAO類(ShopInfoDAO.java、StorageDAO.java)。

service.impl包及子包,主要包含業(yè)務(wù)邏輯接口實(shí)現(xiàn)類(ShopInfoService.java、StorageService.java)。

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

代碼實(shí)現(xiàn)過程中用了注解方式創(chuàng)建和注入javabean,下面主要展示主要代碼及相關(guān)注解。

1) ORM對象ShopInfo.java代碼及注解如下:

@Entity //實(shí)體注解說明

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

public class ShopInfo implements java.io.Serializable {

@Id //標(biāo)識列

@GeneratedValue(strategy=GenerationType.IDENTITY) //標(biāo)識值自動生成方式

private Integer id;

/*一對多關(guān)系注解*/

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

private Set storages = new HashSet(0);

/*以下其它屬性定義*/

}

2) DAO類ShopInfoDAO.java關(guān)鍵代碼及注解如下:

@Repository //加載DAO類到spring容器注解

public class ShopInfoDAO {

@Autowired //自動裝配sesseionFactory

@Qualifier("sessionFactory")

privateSessionFactorysessionFactory;

/*以下CRUD方法定義*/

}

3) Service接口實(shí)現(xiàn)類(ShopInfoService.java)關(guān)鍵代碼及注解:

@Service //加載Service類到spring容器的注解

public class ShopInfoService implements IShopInfoService {

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

privateShopInfoDAOshopInfoDAO;

@Override

@Transactional //在業(yè)務(wù)方法實(shí)現(xiàn)加上事務(wù)管理注解

/*以下為業(yè)務(wù)方法定義,每個(gè)需要事務(wù)管理方法之前加@Transactional注解*/

}

4) 控制器類(OutWareHouseController.java)關(guān)鍵代碼及注解如下:

@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 配置說明

配置正解如否至關(guān)重要,整個(gè)系統(tǒng)通過相關(guān)配置將各組件有機(jī)組織在一起。

1) web.xml主要配置

<!—加載spring容器—>

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

<!— hibernate延遲(LAZY)加載問題的處理,因?yàn)樵陉P(guān)系映射中用到了延遲加載 —>

openSessionInViewFilter

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

openSessionInViewFilter

/*

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

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

如果掃描到有Spring的相關(guān)注解的類,則把這些類注冊為Spring的bean —>

<!—啟動事務(wù)注解的(@Transactional) —>

bean.ShopInfo

bean.Storage

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

<!— spring可以自動去掃描controller包或者子包下面有的@Controller注解的類 —>

<!—啟動MVC相關(guān)注解 —>

<!—視圖解析器 —>

4 結(jié)束語

SpringMVC為JAVAWeb應(yīng)用提供優(yōu)了性能優(yōu)異的MVC框架,可擴(kuò)展性強(qiáng);Hibernate的ORM對JDBC進(jìn)行了精美封裝,極大地簡化了數(shù)據(jù)持久化操作,提高了編碼效率,加速了項(xiàng)目進(jìn)度;Spring的IoC和aop技術(shù),將各組件以松耦合的方式組合在了一起。三個(gè)子框架各司其職,完美結(jié)合。本文以一個(gè)商品出庫模塊為例,詳細(xì)地介紹了Spring+SpringMVC+hibernate架構(gòu)搭建的技術(shù)要點(diǎn)和主要實(shí)現(xiàn)過程,雖然是一個(gè)最小原型系統(tǒng),但是該框架擴(kuò)展性強(qiáng),易于維護(hù),結(jié)合實(shí)際的功能需求,分別在Controller層,Service層,持久層等各層面上擴(kuò)充添加相應(yīng)的組件,即可實(shí)現(xiàn)一個(gè)完整系統(tǒng)。

參考文獻(xiàn):

[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系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 石家莊:統(tǒng)計(jì)與管理,2015(1):49-53.

[4] 瘋狂軟件.Spring MVC+MYBatis企業(yè)應(yīng)用實(shí)戰(zhàn)[M]. 北京:電子工業(yè)出版社,2017.

[通聯(lián)編輯:王力]

临夏市| 西贡区| 咸丰县| 独山县| 手游| 收藏| 肃南| 民县| 邻水| 萨迦县| 元朗区| 特克斯县| 海宁市| 乌鲁木齐市| 玉门市| 稻城县| 大厂| 菏泽市| 厦门市| 南澳县| 合江县| 岐山县| 建水县| 基隆市| 隆回县| 临海市| 泽库县| 滕州市| 清苑县| 清丰县| 仙居县| 赤城县| 修水县| 正镶白旗| 长治市| 东乡县| 博客| 利辛县| 昌平区| 观塘区| 岐山县|