摘 要:在Web應(yīng)用程序的開發(fā)設(shè)計(jì)中,框架開發(fā)的選擇是非常重要的。一個(gè)好的框架開發(fā)可以加快Web應(yīng)用程序的開發(fā)速度,降低開發(fā)成本,減輕開發(fā)人員的工作量。同時(shí),Web應(yīng)用程序具有良好的性能可擴(kuò)展性和可移植性。基于SpringMVC + Spring + Mybatis (SSM)的框架具有良好的性能和快速的開發(fā)效率,逐漸成為Web應(yīng)用的主流開發(fā)框架。
關(guān)鍵詞:Web應(yīng)用程序;SpringMVC;Spring;Mybatis;框架
Spring是一個(gè)開源框架,是2003年出現(xiàn)的輕量級(jí)Java開發(fā)框架。創(chuàng)建它是為了降低企業(yè)應(yīng)用程序開發(fā)的復(fù)雜性。該框架的主要優(yōu)點(diǎn)之一是它的分層體系結(jié)構(gòu),它允許用戶選擇使用哪個(gè)組件,同時(shí)為J2EE應(yīng)用程序開發(fā)提供集成框架。Spring使用基本的JavaBean來(lái)完成以前只能由EJB完成的事情。然而,Spring的使用并不局限于服務(wù)器端開發(fā)。對(duì)于簡(jiǎn)單性、可測(cè)試性和失耦合性,任何Java應(yīng)用程序都可以從Spring中受益。Spring的核心是控制反轉(zhuǎn)(IoC)和面向方面編程(AOP)。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)分層的JavaSE/ EE全棧(一站式)輕量級(jí)開源框架。
SpringMVC屬于Spring框架的后續(xù)產(chǎn)品,已經(jīng)集成到Spring Web Flow中。Spring框架為構(gòu)建Web應(yīng)用程序提供了一個(gè)功能齊全的MVC模塊。SpringMVC解耦了控制器、模型對(duì)象、調(diào)度程序和處理程序?qū)ο蟮慕巧@使得它們更容易定制。
Mybatis是一個(gè)開源項(xiàng)目iBatis的apache,這個(gè)項(xiàng)目的代碼是從Google轉(zhuǎn)移過(guò)來(lái)的apache軟件基金會(huì),并更名為MyBatis。MyBatis是一個(gè)優(yōu)秀的持久性框架,它支持一般的SQL查詢、存儲(chǔ)過(guò)程和高級(jí)映射。MyBatis消除了幾乎所有的JDBC代碼、參數(shù)的手動(dòng)設(shè)置和結(jié)果集的檢索。mybatisx使用簡(jiǎn)單的XML或注釋進(jìn)行配置和原始映射,以映射接口和Java的pojo (Plain Old Java Objects,普通Java對(duì)象)放入數(shù)據(jù)庫(kù)的記錄中。
一、SSM框架的介紹
SSM框架由Spring、SpringMVC和MyBatis三個(gè)開源框架組成,它們經(jīng)常被用作數(shù)據(jù)源更簡(jiǎn)單的web項(xiàng)目的框架。SpringMVC是一個(gè)控制層,spring是用來(lái)管理業(yè)務(wù)邏輯層的。Mybatis用于dao層。在架構(gòu)MVC中,M指的是模型,其中包含服務(wù)、dao和javabean (pojo), V指的是視圖,C指的是控制。SSM框架體系結(jié)構(gòu)如圖1所示。其中,Spring集成了每一層。通過(guò)Spring管理持久化層的映射器(相當(dāng)于dao接口)。通過(guò)Spring管理業(yè)務(wù)層的服務(wù),可以調(diào)用服務(wù)中的映射器接口。Spring進(jìn)行事務(wù)控制。通過(guò)Spring,可以管理表示層的處理程序調(diào)用Handler中的服務(wù)接口。映射器、服務(wù)、處理程序都是javabean。
二、SSM體系各層的特點(diǎn)
持久層的DAO層(映射器)通過(guò)MyBatis調(diào)用。DAO層主要做數(shù)據(jù)持久化層的工作,一些負(fù)責(zé)聯(lián)系數(shù)據(jù)庫(kù)的任務(wù)被封裝在這里,DAO層的設(shè)計(jì)首先是設(shè)計(jì)DAO的接口,然后在Spring的配置文件中定義這個(gè)接口的實(shí)現(xiàn)類,然后可以在模塊中調(diào)用這個(gè)接口來(lái)處理數(shù)據(jù)的業(yè)務(wù),而不需要關(guān)心這個(gè)具體的實(shí)現(xiàn)類接口是哪個(gè)類,結(jié)構(gòu)看起來(lái)很清晰,DAO層的數(shù)據(jù)源配置和數(shù)據(jù)庫(kù)連接的相關(guān)參數(shù)都配置在Spring的配置文件中。
業(yè)務(wù)層的服務(wù)層:服務(wù)層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)。首先設(shè)計(jì)接口,然后設(shè)計(jì)接口的實(shí)現(xiàn)類,然后在Spring的配置文件中配置接口的實(shí)現(xiàn)關(guān)聯(lián)。通過(guò)這種方式,我們可以調(diào)用應(yīng)用程序中的Service接口來(lái)執(zhí)行業(yè)務(wù)處理。業(yè)務(wù)實(shí)現(xiàn)特別是服務(wù)層需要調(diào)用DAO層中已定義的接口,將服務(wù)層的業(yè)務(wù)邏輯封裝起來(lái)有利于通用業(yè)務(wù)邏輯的獨(dú)立性和重用性。
控制器層(Handler層):控制器層負(fù)責(zé)控制具體的業(yè)務(wù)模塊流程,在這一層中,需要調(diào)用Service層中的接口來(lái)控制業(yè)務(wù)流程,控件的配置也在Spring的配置文件中進(jìn)行處理,對(duì)于具體的業(yè)務(wù)流程,會(huì)有不同的控制器,在我們具體設(shè)計(jì)流程時(shí),可以對(duì)流程進(jìn)行抽象和總結(jié),設(shè)計(jì)出可重用的子單元流程模塊;這種方式不僅使程序結(jié)構(gòu)清晰,而且大大減少了代碼量。
視圖層:該層與控制層緊密耦合,需要兩者的結(jié)合才能協(xié)同工作。View層主要負(fù)責(zé)前臺(tái)JSP頁(yè)面的呈現(xiàn)。
三、SSM體系各層耦合關(guān)系
DAO層和Service層可以獨(dú)立開發(fā),它們的相互耦合度很低,可以獨(dú)立進(jìn)行,這樣的模式在大型項(xiàng)目的開發(fā)中尤為有利。
控制器層和視圖層由于耦合程度高,所以需要一起開發(fā),但也可以看作一個(gè)整體,獨(dú)立于前兩層進(jìn)行開發(fā)。這樣,我們只需要在層和層之前知道接口的定義,只需要調(diào)用接口,然后就可以完成必要的邏輯單元應(yīng)用,這是非常清晰和簡(jiǎn)單的。
Service邏輯層的設(shè)計(jì)是基于DAO層的,在建立DAO層之后,就可以建立Service層,Service層在Controller層之下, (下轉(zhuǎn)第141頁(yè))
(上接第139頁(yè)) 所以Service層不僅需要調(diào)用DAO層的接口,還需要為Controller層的類提供調(diào)用的接口,處于中間位置。每個(gè)模型都有一個(gè)Service接口,每個(gè)接口封裝了各自的業(yè)務(wù)處理方法。
四、SSM框架設(shè)計(jì)與實(shí)現(xiàn)步驟和方法
Spring+SpringMVC+MyBatis在Web開發(fā)中的設(shè)計(jì)與實(shí)現(xiàn)應(yīng)用時(shí),設(shè)計(jì)的方法和步驟如下:
(1)在web系統(tǒng)的開發(fā)中,首先要配置web的文件環(huán)境如web.xml、springmvc-servlet.xml。
(2)在web系統(tǒng)的開發(fā)中,要設(shè)計(jì)實(shí)體類,定義對(duì)象的屬性,屬性有g(shù)et和set方法(可以參考數(shù)據(jù)庫(kù)中表的字段對(duì)其進(jìn)行設(shè)置,數(shù)據(jù)庫(kù)在所有編碼開始前都要進(jìn)行設(shè)計(jì)),創(chuàng)建構(gòu)造方法。在SRC目錄下,設(shè)計(jì)mysql的配置文件。屬性數(shù)據(jù)庫(kù),包含jdbc.driver、jdbc.url、jdbc.usernamejdbc、password四個(gè)屬性。
(3)然后,為了設(shè)計(jì)Mapper.xml,首先對(duì)其進(jìn)行定制以返回結(jié)果集,各種標(biāo)簽中的id屬性必須與接口中的方法相同,并且id屬性值必須是唯一的,并且不能重復(fù)使用。
(4)接下來(lái)定義web系統(tǒng)的功能,以對(duì)應(yīng)對(duì)數(shù)據(jù)庫(kù)執(zhí)行的操作,如insert、selecttall、selectByKey、delete、update等。
(5)設(shè)計(jì)Mapper.java,根據(jù)id將Mapper.xml中的操作映射到Java函數(shù)。
(6)服務(wù)層的設(shè)計(jì),為控制層提供服務(wù),接受控制層的參數(shù),完成相應(yīng)的功能,返回控制層。
(7)控制層設(shè)計(jì),將頁(yè)面請(qǐng)求與服務(wù)層連接起來(lái),獲取頁(yè)面請(qǐng)求的參數(shù),通過(guò)自動(dòng)裝配,將不同的URL映射到相應(yīng)的處理函數(shù),并獲取參數(shù),處理參數(shù),然后傳遞給服務(wù)層。
(8)最后,要設(shè)計(jì)JSP頁(yè)面調(diào)用,需要什么參數(shù)以及需要什么數(shù)據(jù)。
總而言之,SSM的設(shè)計(jì)和實(shí)施過(guò)程如下:
數(shù)據(jù)庫(kù)-gt;實(shí)體-gt;Mapper映射-gt;Mapper Java代碼-gt;服務(wù)層-gt;控制層-gt;表示層
五、SSM運(yùn)行過(guò)程
步驟1:jsp(視圖)發(fā)送請(qǐng)求。
步驟2:通過(guò)調(diào)用核心Controller Dispatcher Servlet對(duì)請(qǐng)求解析器進(jìn)行解析:Hand lend Mapping對(duì)請(qǐng)求進(jìn)行解析,并通過(guò)映射關(guān)系匹配到Controller層。
步驟3:調(diào)用控制層中的業(yè)務(wù)邏輯層(service),數(shù)據(jù)持久化層(DAO)返回控制層,請(qǐng)求完成獲取結(jié)果,建立將要跳轉(zhuǎn)的視圖,(Model和view加載并傳輸數(shù)據(jù),設(shè)置視圖)。
步驟4::調(diào)用核心控制器視圖解析器:視圖解析器解析視圖,匹配對(duì)應(yīng)的頁(yè)面,實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。
六、結(jié)論
本文主要介紹了Spring框架的設(shè)計(jì)與實(shí)現(xiàn),Spring MVC和MyBatis在Web應(yīng)用程序的開發(fā)。它簡(jiǎn)化了開發(fā)過(guò)程和工作量。
參考文獻(xiàn):
[1]沃爾斯. Spring實(shí)戰(zhàn) [M]. 人民郵電出版社,2016.
[2]卡內(nèi)爾. Spring開發(fā)三劍客[M],人民郵電出版社, 2020.
[3] 陳恒等. Spring Boot從入門到實(shí)戰(zhàn)[M]. 清華大學(xué)出版社,2020.