雷申洪 王大衛(wèi)
四川民族學(xué)院 四川 康定 626001
框架(FrameWork)是預(yù)先定好的骨架,可重用的半成品模塊,用于開(kāi)發(fā)煩瑣復(fù)雜程序。幾年前SSH框架是市場(chǎng)上比較流行的框架,SSH框架是開(kāi)源的,也是最受企業(yè)欣賞的框架技術(shù)之一,SSH框架包含Structs2、Spring、Hibernate。但隨著技術(shù)的發(fā)展,SSH框架的缺點(diǎn)也顯現(xiàn)出來(lái),例如:對(duì)servlet過(guò)度依賴,持久化類(lèi)無(wú)法映射多個(gè)表,屬于重量級(jí)框架,具有耦合度高,占用資源多,部署難等缺點(diǎn)。隨后一種更加靈活的輕量級(jí)框架SSM框架出現(xiàn),它由Mybatis、Spring、SpringMVC三個(gè)框架組合而成?,F(xiàn)在SSM框架整合技術(shù)應(yīng)用于網(wǎng)站管理頁(yè)面,數(shù)據(jù)庫(kù),前端,后臺(tái)之中,目前廣泛應(yīng)用于電子商務(wù)平臺(tái)開(kāi)發(fā)之中,Spring框架整合MyBatis和SpringMVC框架接收用戶請(qǐng)求,并且對(duì)請(qǐng)求做出響應(yīng)。各個(gè)模塊之間業(yè)務(wù)流程由SpringMVC框架負(fù)責(zé),SpringMVC應(yīng)用與表示層和業(yè)務(wù)層之間,Spring在中間層進(jìn)行工作,MyBatis負(fù)責(zé)業(yè)務(wù)處理對(duì)象和數(shù)據(jù)庫(kù)進(jìn)行交互,解決對(duì)象和數(shù)據(jù)庫(kù)之間映射問(wèn)題,處于系統(tǒng)底層。所以,SSH框架層次結(jié)構(gòu)清晰,為系統(tǒng)開(kāi)發(fā)提供有力支撐。
傳統(tǒng)的Java EE開(kāi)發(fā)使用重量級(jí)框架,導(dǎo)致開(kāi)發(fā)效率低下,維護(hù)難度增加。Spring致力于Java EE開(kāi)發(fā)的解決方案,它以Ioc、AOP為主要思想,屬于一個(gè)大雜燴,將不同的框架整合到一起,并滲透業(yè)務(wù)層、表現(xiàn)層等,使得各層之間低耦合、無(wú)縫銜接,能協(xié)同整理SpringMVC、MyBatis等框架[1]。
1.1.1 Spring體系結(jié)構(gòu)。Spring有6個(gè)部分約20個(gè)模塊組成,這些分別是Data、Web、AOP(面向切片編程)、instrumentation、Core Container、Test等。Spring體系結(jié)構(gòu)如圖1所示:

圖1 Spring體系結(jié)構(gòu)
1.1.1.1 Spring Core。Spring由Core、Beans、Context和語(yǔ)言表達(dá)模塊組成,其中核心容器是框架最基礎(chǔ)的部分,IOC是核心容器中最核心的內(nèi)容;Beans模塊是一個(gè)復(fù)雜的工廠模式實(shí)現(xiàn),主要提供BeanFactory;Spring Context建立在Beans和Core的基礎(chǔ)上,主要提供集成工具,Application Context是本模塊的重點(diǎn)內(nèi)容;表達(dá)式語(yǔ)言支持在運(yùn)行時(shí)提供查詢操作。
1.1.1.2 數(shù)據(jù)訪問(wèn)集成。數(shù)據(jù)訪問(wèn)集成主要由JDBC、OXM、ORM(Object Relational Mapping)和事務(wù)處理模塊等組成。其中,Spring JDBC提供了JDBC的抽象邏輯,精簡(jiǎn)了代碼,但代碼更加健壯;ORM,Spring ORM由ORM框架支持,例如JPA、JDO、Hibernate和iBatis,提供了集成層;OXM 模塊提供了抽象層,它支持對(duì) JAXB、Castor、XMLBeans、JiBX 和XStream 的對(duì)象XML 映射實(shí)現(xiàn);事務(wù)處理模塊為特殊接口的類(lèi)及所有的 POJO 支持編程式和聲明式事務(wù)管理[2]。
1.1.1.3 Web。Spring Web在Web開(kāi)發(fā)過(guò)程中提供對(duì)Mybatis、SpringMVC等Web框架支持,能較好地管理這些框架。例如:Spring能將數(shù)據(jù)注入框架,也能在調(diào)用方法前,調(diào)用Spring的攔截
Spring MVC 框架提供Java EE平臺(tái)開(kāi)發(fā)中的Web模塊,屬于一個(gè)開(kāi)源框架,并與Spring框架無(wú)縫銜接。SpringMVC在本質(zhì)上屬于Servlet,主要作用是MVC模式中的Controller,用來(lái)建立試圖與模型的數(shù)據(jù)交互。
在SpringMVC框架中,Servlet被Controller(控制器)取代。Controller的作用是接收視圖發(fā)來(lái)的請(qǐng)求,并調(diào)用Model進(jìn)行處理,處理完成后返回結(jié)果,并調(diào)用視圖層進(jìn)行渲染,最后反饋到客戶端執(zhí)行。SpringMVC原理圖如圖2所示:

圖2 SpringMVC 原理圖
MyBatis框架由iBatis發(fā)展而來(lái),是一個(gè)開(kāi)源的數(shù)據(jù)持久框架。它支持JDBC訪問(wèn)數(shù)據(jù)庫(kù),SQL查詢、存儲(chǔ)過(guò)程和高級(jí)映射,解決了SQL語(yǔ)句與Java類(lèi)之間的阻抗不匹配。MyBatis是一個(gè)優(yōu)秀的持久層框架,其主要的特點(diǎn)是SQL語(yǔ)句配置在配置文件中,將SQL語(yǔ)句與程序分離開(kāi)來(lái),實(shí)現(xiàn)了不修改代碼,可直接修改SQL[3]。
1.3.1 ORM
ORM(對(duì)象關(guān)系/、映射)作為一種數(shù)據(jù)持久化技術(shù)。它的特點(diǎn)是建立對(duì)象模型與數(shù)據(jù)庫(kù)數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系,通過(guò)ORM技術(shù),使用JavaBean對(duì)象操作數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。在實(shí)際開(kāi)發(fā)過(guò)程中,ORM就像一座橋梁,程序員無(wú)須通過(guò)復(fù)雜的數(shù)據(jù)庫(kù)連接技術(shù)和SQL語(yǔ)句操作數(shù)據(jù)庫(kù)中的表,直通在Mybatis.xml文件中配置映射關(guān)系,即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)增、刪、改、查等操作。ORM映射關(guān)系如圖3所示:

圖3 ORM映射關(guān)系
SSM框架即Spring+SpringMVC+MyBatis,具有速度快、性能高且穩(wěn)定、配置簡(jiǎn)單等特點(diǎn),是目前市場(chǎng)比較流行的企業(yè)開(kāi)發(fā)框架。
MyBatis屬于一個(gè)ORM數(shù)據(jù)持久的框架,SpringMVC是一個(gè)Web框架,雖然MyBatis和SpringMVC框架屬于兩個(gè)完全獨(dú)立的框架,但是通過(guò)Spring的IOC和AOP能將SpringMVC和MyBatis中的對(duì)象配置到Spring框架的容器中,進(jìn)而實(shí)現(xiàn)Spring框架、SpringMVC和MyBatis框架的整合,此舉能增強(qiáng)系統(tǒng)的靈活性,提高開(kāi)發(fā)效率,優(yōu)化代碼,降低開(kāi)發(fā)難度等[4]。SSM整合原理如圖4所示:

圖4 SSM整合原理圖
2.1.1 web.xml。在web.xml配置文件中重點(diǎn)需要配置DispatcherServlet。DispatcherServlet是SpringMVC框架的核心,它的作用是將接攔截的數(shù)據(jù)交給相應(yīng)的處理器處理。另外,還需對(duì)字符編碼過(guò)濾配置,上下文context-param配置,監(jiān)聽(tīng)器ContextLoaderListener配置等[5]。
2.1.2 spring-mybatis.xml配置文件。spring-mybatis.xml是Spring的配置文件,該配置文件主要對(duì)事務(wù)管理、數(shù)據(jù)源對(duì)象MyBatis等進(jìn)行配置。
2.1.2.1 數(shù)據(jù)源相關(guān)配置,包括數(shù)據(jù)庫(kù)連接基本信息配置(db.Properties),即數(shù)據(jù)庫(kù)連接地址、用戶名、密碼等。還可配置數(shù)據(jù)庫(kù)連接池的屬性,定義數(shù)據(jù)連接池的個(gè)數(shù)、等待時(shí)間、回收方法,連接數(shù)據(jù)庫(kù)時(shí),是否進(jìn)行安全校驗(yàn)等[6]。
2.1.2.2 事務(wù)管理配置。通過(guò)AOP切面對(duì)事務(wù)進(jìn)行管理,所有的業(yè)務(wù)邏輯都會(huì)在本文件中配置。其中aop:config標(biāo)簽的作用是使用AspectJ的expression操作來(lái)完成相關(guān)事務(wù)的配置。
2.1.2.3 MyBatis的SQLSessionFactoryBean配置,會(huì)話工廠用于配置數(shù)據(jù)源的映射位置。
2.1.2.4 MapperScannerConfigurer用于配置sqlSessionFactory BeanName和basePackage,自動(dòng)掃描 將Mapper接口生成代理注入Spring。
2.1.2.5 transactionManager用于配置事務(wù)管理器,并將數(shù)據(jù)注入連接池。
2.1.3 springmvc.xml,用于配置初始的DispatcherServlet,用于開(kāi)啟注解掃描Controller注解,配置視圖解析對(duì)象,過(guò)濾靜態(tài)資源等[7]。
2.2.1 新建項(xiàng)目并導(dǎo)入相關(guān)的jar包,包括測(cè)試用包、Web開(kāi)發(fā)相關(guān)包、Spring開(kāi)發(fā)相關(guān)包、日志開(kāi)發(fā)包、數(shù)據(jù)庫(kù)驅(qū)動(dòng)包、MyBatis開(kāi)發(fā)包、文件上傳開(kāi)發(fā)包等[8]。
2.2.2 搭建Spring框架,創(chuàng)建Spring配置文件,測(cè)試spring。
2.2.3 搭建SpringMVC框架:創(chuàng)建springmvc配置文件,創(chuàng)建JSP頁(yè)面,編寫(xiě)Controller代碼,測(cè)試。
2.2.4 Spring框架與SpringMVC整合。①創(chuàng)建service對(duì)象。②Controller代碼中注入service對(duì)象。③web.xml中配置spring監(jiān)聽(tīng)器和文件位置。④加載Spring容器和SpringMVC容器。當(dāng)Controller代碼中能成功調(diào)用service對(duì)象方法,表明整合成功。
2.2.5 搭建MyBatis框架。①dao層接口編寫(xiě)SQL語(yǔ)句。②編寫(xiě)mybatis.xml文件。③MyBatis框架測(cè)試。若測(cè)試能對(duì)數(shù)據(jù)庫(kù)操作,則配置成功。
2.2.6 Spring框架與MyBatis整合。①創(chuàng)建spring-mybatis.xml配置文件,配置數(shù)據(jù)庫(kù)連接池。②配置SqlSessionFactory工廠,并配置dao層位置,讓其代理注入到Ioc容器中。③在springmybatis.xml中配置spring事務(wù)管理。④測(cè)試[9]。
在網(wǎng)站開(kāi)發(fā)經(jīng)常會(huì)使用SSM框架,本文簡(jiǎn)明扼要地分析了SSM框架的特點(diǎn)及原理,重點(diǎn)分析了配置文件的特點(diǎn),闡述了SSM框架搭建的過(guò)程,在一定程度上幫助初學(xué)者學(xué)習(xí)SSM框架,了解其原理,并為其快速搭建框架提供了可能。
