版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.:.; HYPERLINK /yza3957/article/details/7814588 Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解一 2021-07-31 15:35 198人閱讀 HYPERLINK /yza3957/article/details/7814588 l comments#comments 評(píng)論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /yza3957/article/details/7814588 l report#report o 告發(fā) 告發(fā) Spr
2、ing更新到3.0之后,其MVC框架參與了一個(gè)非常不錯(cuò)的東西那就是REST。它的開放式特性,與Spring的無(wú)縫集成,以及Spring框架的優(yōu)秀表現(xiàn),使得如今很多公司將其作為新的系統(tǒng)開發(fā)框架。大象根據(jù)實(shí)踐的工程閱歷,以之前SSH2例子為根底,對(duì)其進(jìn)展一次大改造,詳細(xì)的為大家講解如何實(shí)現(xiàn)SSM3全注解式的開發(fā)。 這次大象將采取兩種構(gòu)建方式,一是很多人喜歡用的MyEclipse,另一個(gè),那么是用Eclipse+Maven。這一篇,將主要講解開發(fā)環(huán)境設(shè)置與Maven構(gòu)建方式。 1、開發(fā)環(huán)境 JDK1.6.0_18 Eclipse3.2.1 MyEclipse5.1.0 Eclipse-JEE-HEL
3、IOS-SR2 Maven3.0.1 m2eclipse0210112-1712 Tomcat6.0.10 maven-jetty-plugin6.1.26 MySQL5.0.27 Navicat Lite for MySQL 8.1.20 每個(gè)人的開發(fā)環(huán)境能夠會(huì)有差別,但有一點(diǎn)我需求闡明的是,JDK的版本不得低于1.5,由于用到了很多1.5版才支持的新特性。Tomcat、Jetty、Maven和MySQL請(qǐng)不要低于我所用的版本,由于我沒(méi)在其它的版本上進(jìn)展測(cè)試。Navicat那么是MySQL數(shù)據(jù)庫(kù)的圖形化操作工具。接下來(lái)我將引見如何在Eclipse3.6中,運(yùn)用m2eclipse插件構(gòu)建web
4、運(yùn)用及測(cè)試開發(fā)環(huán)境。 2、設(shè)置Maven Maven的安裝很簡(jiǎn)單,只需求解壓即可,請(qǐng)?jiān)O(shè)置PATH變量,這樣可以運(yùn)用命令行進(jìn)展操作,然后就要在%MAVEN_HOME%conf目錄下,對(duì)settings.xml作下修正 這就是設(shè)置本地倉(cāng)庫(kù),目錄可以根據(jù)本人的實(shí)踐情況更改,不過(guò)請(qǐng)運(yùn)用/正斜杠,由于我在實(shí)踐運(yùn)用中,發(fā)現(xiàn)反斜杠有時(shí)候獲取不到資源。對(duì)于個(gè)人運(yùn)用,設(shè)置好這個(gè)就OK了,至于Nexus配置不在本文討論范圍內(nèi),大家如有興趣可以去看看juven xu的博客,他是目前公認(rèn)的Maven專家。 3、安裝m2eclipse 選擇Help-Install New Software.在彈出的窗口中,點(diǎn)擊Add.
5、又會(huì)彈出一個(gè)小窗口,輸入m2eclipse的安裝地址,如以下圖所示: 輸入完成后,點(diǎn)擊OK,這時(shí)Eclipse就開場(chǎng)查找這個(gè)插件了,請(qǐng)耐心等一會(huì)。 插件找到后,請(qǐng)勾選要安裝的內(nèi)容,接下來(lái)就是普通的安裝流程了,此處省略500字。安裝完成請(qǐng)重新啟動(dòng)Eclipse,然后再對(duì)這個(gè)插件進(jìn)展一番設(shè)置。 4、設(shè)置m2eclipse 進(jìn)入Perferences,選擇Maven,去掉Download repository index updates on startup前的勾,默許情況是會(huì)在每次啟動(dòng)Eclipse的時(shí)候自動(dòng)去Maven中央倉(cāng)庫(kù)下載索引,這無(wú)疑是非常不好的,要知道Maven中央倉(cāng)庫(kù)所包含的jar資
6、源非常龐大,而且每天都會(huì)有很多新的工程上傳,弄不好Eclipse還沒(méi)開場(chǎng)用,就被這些東西搞掛掉了。 接下來(lái)選擇Installations將這個(gè)插件自帶的Maven換成之前安裝的Maven,這樣就保證了版本的一致性。 設(shè)置好這個(gè)之后,再點(diǎn)擊User Settings,用本機(jī)maven的settings.xml交換默許的配置文件,由于默許的設(shè)置是會(huì)將本地倉(cāng)庫(kù)放到系統(tǒng)盤符Documents and Settings用戶目錄.m2repository這個(gè)目錄下面。 大家可以看到,用maven中的配置文件交換后,下面的Local Repository自動(dòng)變卦為settings.xml中的設(shè)置。 5、創(chuàng)建
7、maven工程 做完這些,我們就可以開場(chǎng)創(chuàng)建Maven工程了。選擇New-other.-Maven-Maven Project,然后選擇下一步 請(qǐng)?jiān)O(shè)置任務(wù)空間途徑,大象的默許任務(wù)空間放在eclipse的根目錄下面,這里的Location顯示的應(yīng)該為空,為了進(jìn)展闡明,特將途徑顯示出來(lái)。確定沒(méi)問(wèn)題后,Next 這個(gè)列表顯示的就是maven支持的一切工程創(chuàng)建類型,我們是開發(fā)web運(yùn)用,所以請(qǐng)選擇maven-archetype-webapp 最后一步輸入我們要?jiǎng)?chuàng)建的工程,在Maven世界中,運(yùn)用坐標(biāo)來(lái)獨(dú)一標(biāo)識(shí)一個(gè)構(gòu)件,可以了解為工程,資源等等。Group Id表示當(dāng)前工程所屬的實(shí)踐工程,Artifac
8、t Id定義實(shí)踐工程中的一個(gè)Maven工程,根據(jù)名字就可以看出來(lái),Group Id是一個(gè)大范圍,而Artifact Id是一個(gè)小范圍。比如大家都很熟習(xí)的spring,就分成了spring-core.jar、spring-beans.jar、spring-context.jar等等。在maven里面,它的Group Id就是org.springframework,而Artifact Id那么為spring-core、spring-beans、spring-context。怎樣樣?了解了沒(méi)有? 到此,工程生成了,請(qǐng)展開src/main,在main目錄下新建一個(gè)java文件夾,翻開ssm3的工程屬性
9、,選擇Java Build Path-Source-Add Folder.-勾選java,這樣做的目的,就是將src/main/java這個(gè)途徑作為源文件的文件夾,這和以往用MyEclipse做開發(fā)的目錄構(gòu)造是不同的。而maven的規(guī)那么也是這樣定義的,假設(shè)他不進(jìn)展這個(gè)設(shè)置,就算他在main下面創(chuàng)建了java目錄,再添加包或類時(shí),就會(huì)有問(wèn)題,大家試試,看會(huì)出現(xiàn)什么錯(cuò)誤。 6、運(yùn)轉(zhuǎn)ssm3 接下來(lái),在pom.xml里面參與maven-jetty-plugin插件,默許生成的配置都可以去掉,整個(gè)pom就只需以下圖所示的配置。 翻開Run Configurations,這有多種方式翻開,可以從菜單R
10、un里面選,也可以從工具欄選擇,還可以在工程點(diǎn)擊右鍵選擇。 在彈出的窗口,Maven Build里面設(shè)置運(yùn)轉(zhuǎn)參數(shù),點(diǎn)擊Browse Workspace.會(huì)彈出以下圖那個(gè)小窗口,設(shè)定Base directory,參與jetty:run,點(diǎn)擊Run,啟動(dòng)jetty 在閱讀器中輸入httplocalhost:8080/ssm3會(huì)顯示Hello World!,調(diào)用的是ssm3/main/webapp/index.jsp,大象加了點(diǎn)內(nèi)容,結(jié)果就是這樣的 到這里,關(guān)于在Eclipse里搭建maven環(huán)境,配置,創(chuàng)建,運(yùn)轉(zhuǎn),測(cè)試就全部講完了,大家動(dòng)手做做,熟習(xí)一下這種開發(fā)方式,接下來(lái)就會(huì)在這個(gè)骨架上開發(fā)SS
11、M3例如。恩,我們下次繼續(xù)。 HYPERLINK /yza3957/article/details/7814600 Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解二 2021-07-31 15:37 345人閱讀 HYPERLINK /yza3957/article/details/7814600 l comments#comments 評(píng)論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /yza3957/article/details/7814600 l report#report o
12、 告發(fā) 告發(fā) 在上一篇文章中我詳細(xì)的引見了如何搭建maven環(huán)境以及生成一個(gè)maven骨架的web工程,那么這章中我將講述Spring MVC的流程構(gòu)造,Spring MVC與Struts2的區(qū)別,以及例子中的一些配置文件的分析。 一、Spring MVC 3.0引見 Spring MVC是一個(gè)典型的MVC框架,是Spring內(nèi)置的Web框架,可以作為運(yùn)用工程的展現(xiàn)層,繼Spring 2.0對(duì)Spring MVC進(jìn)展艱苦晉級(jí)后,Spring 2.5又為Spring MVC引入了注解驅(qū)動(dòng)功能,再到3.0時(shí)代,全面支持REST的網(wǎng)絡(luò)效力和更容易的網(wǎng)絡(luò)編程。這一系列的變革,無(wú)疑吸引著我們走進(jìn)Spri
13、ng MVC 3.0的世界。 REST功能是Spring MVC 3.0新增的,它經(jīng)過(guò)不帶擴(kuò)展名的URL來(lái)訪問(wèn)系統(tǒng)資源。REST是把訪問(wèn)的一切資源看成靜態(tài)的,一個(gè)或一組,每個(gè)不同的URL地址都是一個(gè)靜態(tài)資源。那么Spring MVC 3.0是如何支持REST的呢?簡(jiǎn)單的說(shuō),它是經(jīng)過(guò)RequestMapping及PathVariable注解提供的,在RequestMapping中指定value與method,就可以處置對(duì)應(yīng)的懇求。另外spring mvc框架還做了很多很多任務(wù)。 二、Spring MVC流程 大象根據(jù)官方文檔的引見,以及本人的了解,畫了一個(gè)Spring MVC的流程構(gòu)造圖,大家可
14、以參考下。 1、Spring MVC的中心是DispatcherServlet,當(dāng)客戶端發(fā)送一個(gè)懇求時(shí),這個(gè)懇求經(jīng)過(guò)一系列過(guò)濾器處置。然后DispatcherServlet會(huì)接納到這個(gè)懇求。 2、DispatcherServlet會(huì)從HandlerMapping對(duì)象中查找與懇求匹配的Controller,并將結(jié)果前往給DispatcherServlet。 3、DispatcherServlet將懇求轉(zhuǎn)發(fā)給目的Controller,假設(shè)定義有攔截器,那么會(huì)經(jīng)過(guò)這些攔截器處置。 4、標(biāo)Controller處置完成業(yè)務(wù)邏輯后,會(huì)前往一個(gè)結(jié)果給DispatcherServlet。 5、Dispatch
15、erServlet根據(jù)結(jié)果查詢ViewResolver,找到與之對(duì)應(yīng)的視圖對(duì)象,同樣將結(jié)果前往給DispatcherServlet。 6、DispatcherServlet根據(jù)指定的顯示結(jié)果,調(diào)用模板對(duì)象渲染view。 7、將view前往給客戶端。 根據(jù)上面的闡明,可以很很明顯的看出,Spring MVC的中心是Servlet,并且創(chuàng)建的Controller其實(shí)也是一個(gè)Servlet。 三、Spring與struts2比較 另一個(gè)非常有名的MVC框架是Struts2,Spring MVC的中心是Servlet,而Struts2的中心那么是Filter。下表列出Spring MVC與Struts
16、2的主要區(qū)別與比較結(jié)果。 經(jīng)過(guò)上面的綜合比較,Spring MVC 3.0的優(yōu)勢(shì)要比Struts2大得多,雖然它還有些缺乏的地方,但隨著后期版本的晉級(jí),必然會(huì)進(jìn)展改良,會(huì)做的更好。所以采用Spring MVC 3.0作為系統(tǒng)的展現(xiàn)層要比Struts2好。 四、線程平安 由于Spring MVC默許是Singleton的,所以會(huì)產(chǎn)生一個(gè)潛在的平安隱患。根本中心是instance變量堅(jiān)持形狀的問(wèn)題。 這個(gè)問(wèn)題有兩種處理方法: a)在控制器中不運(yùn)用實(shí)例變量 b)將控制器的作用域從單例改為原型 這兩種做法有好有壞,第一種,需求開發(fā)人員擁有較高的編程程度與思想認(rèn)識(shí),在編碼過(guò)程中力求防止出現(xiàn)這種BUG,而
17、第二種那么是容器自動(dòng)的對(duì)每個(gè)懇求產(chǎn)生一個(gè)實(shí)例,由JVM進(jìn)展渣滓回收,因此做到了線程平安。運(yùn)用第一種方式的益處是實(shí)例對(duì)象只需一個(gè),一切的懇求都調(diào)用該實(shí)例對(duì)象,速度和性能上要優(yōu)于第二種,不好的地方,就是需求程序員本人去控制實(shí)例變量的形狀堅(jiān)持問(wèn)題。第二種由于每次懇求都創(chuàng)建一個(gè)實(shí)例,所以會(huì)耗費(fèi)較多的內(nèi)存空間。 五、配置文件 Spring MVC是Spring的一個(gè)組成部分,所以配置文件就會(huì)變得簡(jiǎn)單許多。以下就是本例子中最重要的幾個(gè)配置文件。 1、pom.xml 管理工程依賴,編譯,發(fā)布,插件配置等等。一切的依賴包都由配置決議,另外所需依賴包的其它依賴,無(wú)需配置,maven會(huì)自動(dòng)獲取并進(jìn)展管理,這無(wú)疑幫
18、我們減少了很多任務(wù)量,再也不用為四處找jar包,或版本不一致而頭疼了。 定義依賴版本屬性 Spring依賴,本例是一個(gè)很根底的例子,所以有這些就夠了,以后有擴(kuò)展再添加。 MyBatis依賴,iBatis從3.0版之后就改名為MyBatis。這個(gè)例子,大象沒(méi)有運(yùn)用Hibernate,而是采用更輕量級(jí)的MyBatis來(lái)作為耐久層框架,運(yùn)用很簡(jiǎn)單,也很靈敏。另外,本例還用到了一個(gè)mybatis-spring插件,這是由于spring 3.0.5僅支持ibatis 2.0,所以需求這個(gè)插件來(lái)處置底層數(shù)據(jù)源等任務(wù)。 本例用到了AOP,所以需求這兩個(gè)依賴 下面是其它一些必需的依賴,值得闡明的就是,由于在本
19、例中,大象對(duì)Service還是用的類,沒(méi)有進(jìn)展基于接口的實(shí)現(xiàn)方式,所以需求cglib這個(gè)依賴。另外,頁(yè)面運(yùn)用html作為展現(xiàn)層,運(yùn)用freemarker標(biāo)簽處置動(dòng)態(tài)數(shù)據(jù)。 2、web.xml 與ssh2的web.xml主要的區(qū)別就是交換Struts2的啟動(dòng)配置,改為Spring MVC的設(shè)置,配置如下: servlet-context.xml包含容器啟動(dòng)時(shí),所要執(zhí)行的內(nèi)容,而service-context.xml那么是接下來(lái)由spring上下文監(jiān)聽器對(duì)其進(jìn)展掃描執(zhí)行。這兩個(gè)配置文件可以合并成一個(gè),大象為了便于管理,并且為了運(yùn)用spring上下文,寫成了兩個(gè)文件。假設(shè)我們不指定init-para
20、m配置,默許的,在效力器啟動(dòng)時(shí),會(huì)在WEB-INF目錄下查找命名規(guī)那么為-servlet.xml的文件,對(duì)應(yīng)到這里就是ssm3-servlet.xml文件,大象一致將一切文件都放在了classpath下面。 3、servlet-context.xml Spring MVC啟動(dòng)時(shí)的配置文件,包含組件掃描、url映射以及設(shè)置freemarker參數(shù),讓spring不掃描帶有Service注解的類。為什么要這樣設(shè)置?由于servlet-context.xml與service-context.xml不是同時(shí)加載,假設(shè)不進(jìn)展這樣的設(shè)置,那么,spring就會(huì)將一切帶Service注解的類都掃描到容器中,
21、等到加載service-context.xml的時(shí)候,會(huì)由于容器曾經(jīng)存在Service類,使得cglib將不對(duì)Service進(jìn)展代理,直接導(dǎo)致的結(jié)果就是在service-context中的事務(wù)配置不起作用,發(fā)生異常時(shí),無(wú)法對(duì)數(shù)據(jù)進(jìn)展回滾。另外可以將REST URL解析為懇求映射的是DefaultAnnotationHandlerMapping這個(gè)類,它在啟動(dòng)時(shí),對(duì)Controller中一切標(biāo)注了RequestMapping注解的方法,都放到了一個(gè)HandlerMapping對(duì)象中,當(dāng)有懇求時(shí),就在這個(gè)對(duì)象中進(jìn)展查找能否有與之匹配途徑的處置方法,有那么執(zhí)行,沒(méi)有就會(huì)輸出一個(gè)Not Page Fo
22、und警告信息。 展現(xiàn)層運(yùn)用freemarker模板引擎,為了便于編輯,大象在這里運(yùn)用html作為展現(xiàn)頁(yè)。Spring框架對(duì)freemarker進(jìn)展了集成與封裝,配置起來(lái)非常簡(jiǎn)單。主要是定義FreeMarker視圖解析器與屬性配置,網(wǎng)上有很多關(guān)于這些屬性含義的引見,大象就不在這里啰嗦了,后面講到Spring MVC的時(shí)候會(huì)結(jié)合代碼來(lái)進(jìn)展闡明。Spring MVC支持多種類型的視圖文件。如:jsp、freemarker、velocity、tiles、jasperreports等。 4、service-context.xml 與ssh2里面的application.xml區(qū)別不大,主要是將hibe
23、rnate那部分改為mybatis,還要將MybatisDao基類配置進(jìn)來(lái),以便Service類可以用注解的方式引入,然后就是掃描包途徑,不掃描帶有Controller注解的類。由于這些類曾經(jīng)隨容器啟動(dòng)時(shí),在servlet-context中掃描過(guò)一遍了。 5、mybatis-config.xml mybatis的主配置,里面包含了POJO的映射文件,這里了解一下就行,后面的章節(jié)會(huì)對(duì)這些進(jìn)展闡明,熟習(xí)ibatis的朋友就很簡(jiǎn)單了,可以直接跳過(guò)。 到此,關(guān)于配置文件的闡明就講完了,由于這個(gè)SSM3的例子采用maven來(lái)構(gòu)建,與之前的SSH2不一樣,大象對(duì)配置文件進(jìn)展了簡(jiǎn)要的闡明,運(yùn)用maven的益
24、處,大家應(yīng)該看出來(lái)了,它對(duì)于開發(fā)構(gòu)建來(lái)說(shuō)顯得簡(jiǎn)單一些,可以使他不需求四處去找jar包,也不用他去擔(dān)憂版本不一致的問(wèn)題,另外,對(duì)于依賴的jar包,它還能自動(dòng)去查找它本人的依賴,這可以減少我們很多不用要的反復(fù)勞動(dòng)。下一章,我將分析下本例的層次構(gòu)造與MyBatis的簡(jiǎn)單運(yùn)用。 HYPERLINK /yza3957/article/details/7814611 Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解三 2021-07-31 15:38 789人閱讀 HYPERLINK /yza3957/article/details/7814611 l c
25、omments#comments 評(píng)論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /yza3957/article/details/7814611 l report#report o 告發(fā) 告發(fā) 前兩章我為大家詳細(xì)引見了如何搭建Maven環(huán)境、Spring MVC的流程構(gòu)造、Spring MVC與Struts2的區(qū)別以及例如中的一些配置文件的分析。在這一章,我就對(duì)例如的層次構(gòu)造進(jìn)展闡明,以及MyBatis的一些簡(jiǎn)單引見。本文不會(huì)對(duì)MyBatis作詳細(xì)闡明,大象還是假定閱讀本文的朋友對(duì)MyBatis(ibatis)有最根本的了解,只需這
26、樣才干較好的了解本文的內(nèi)容。關(guān)于MyBatis請(qǐng)查看它的官方文檔及其它參考資料,本文不作詳細(xì)討論。一、工程構(gòu)造圖上面這是典型的Maven工程構(gòu)造方式,運(yùn)用本地倉(cāng)庫(kù)管理jar包的依賴,運(yùn)用插件打包編譯發(fā)布非常方便,讓我們從傳統(tǒng)的開發(fā)方式中解放出來(lái),大家都快來(lái)運(yùn)用Maven構(gòu)建工程吧!二、映射文件運(yùn)用MyBatis進(jìn)展耐久化操作,需求設(shè)置一個(gè)映射文件,普通來(lái)說(shuō),每張表對(duì)應(yīng)一個(gè)實(shí)體對(duì)象和一個(gè)mapper映射文件。而MyBatis里面沒(méi)有像Hibernate那樣復(fù)雜的關(guān)聯(lián)關(guān)系,所以,它的每個(gè)實(shí)體類其實(shí)就是一個(gè)很普通的POJO類。而映射文件中,都是SQL語(yǔ)句,下面就是例如中RoleMapper.xml的
27、代碼片段。那么,MyBatis是如何將數(shù)據(jù)庫(kù)字段與POJO對(duì)象進(jìn)展映射的呢?這是在它的內(nèi)部,會(huì)將到得的結(jié)果或構(gòu)造集,與我們定義的POJO對(duì)象屬性進(jìn)展映射,規(guī)那么是,屬性首字母小寫,運(yùn)用駝峰式命名方式,而字段那么是單詞與單詞間,用下劃線銜接。比如:數(shù)據(jù)庫(kù)有個(gè)USER_NAME字段,那么與它對(duì)應(yīng)的屬性就應(yīng)該是userName。假設(shè)字段命名沒(méi)有運(yùn)用下劃線,那么屬性可以直接定義成該單詞。比如,NAME字段,它的屬性就是name。三、基于namespace接口與公用dao的區(qū)別從MyBatis3.0開場(chǎng),對(duì)mapper中的namespace屬性新增了一個(gè)特性:可以指定詳細(xì)的接口來(lái)作為耐久化操作類,在接口
28、中定義與映射文件中id屬性值一樣的方法,MyBatis會(huì)自動(dòng)去綁定和執(zhí)行對(duì)應(yīng)的SQL語(yǔ)句。這種接口實(shí)現(xiàn)方式,需求為每個(gè)Mapper創(chuàng)建一個(gè)接口,假設(shè)系統(tǒng)做大了,維護(hù)這些類會(huì)比較費(fèi)事,大象個(gè)人傾向于根底效力式的Dao實(shí)現(xiàn)類,如例子中的MyBatisDao。四、MyBatisDao耐久化操作基類,SqlSessionDaoSupport是mybatis-spring插件中封裝的,用于獲得SQL Session銜接,執(zhí)行數(shù)據(jù)庫(kù)操作,我定義了幾個(gè)常用的方法。關(guān)于mybatis-spring插件我簡(jiǎn)單引見一下,Spring 3.x的發(fā)布并沒(méi)有對(duì)MyBatis這一優(yōu)秀的SQL框架提供支持,雖然在它的問(wèn)題列
29、表中曾經(jīng)有這樣的懇求,但直到目前3.0.5版的發(fā)布,都還沒(méi)將這個(gè)問(wèn)題處置掉。不過(guò)這難不倒開源世界里寬廣的喜好者與奉獻(xiàn)者,mybatis-spring就是在這樣的情況下誕生了。它是由MyBatis社區(qū)喜好者完成的一個(gè)開源工程,用來(lái)進(jìn)展Spring 3.0與MyBatis 3.0的配置整合。該插件需求運(yùn)轉(zhuǎn)在JDK 5.0或更高版本。五、Service在ssm3這個(gè)例如中,大家有沒(méi)有發(fā)現(xiàn),曾經(jīng)沒(méi)有為每個(gè)entity定義一個(gè)dao,而是一致的調(diào)用MyBatisDao作為存儲(chǔ)效力接口。另外與運(yùn)用Hibernate的主要區(qū)別,就是不能直接傳一個(gè)對(duì)象參數(shù),還必需寫上key值,它是namespace加上ID值
30、。六、entityMyBatis的實(shí)體類就是一個(gè)簡(jiǎn)單的POJO對(duì)象,只是用來(lái)與表字段進(jìn)展關(guān)聯(lián)映射,請(qǐng)留意,我這里所說(shuō)的映射不是像Hibernate那種綁定關(guān)系,只一種存放數(shù)據(jù)的對(duì)象而已。七、測(cè)試上面的步驟完成后,接下來(lái)就需求測(cè)試下我們的業(yè)務(wù)接口能否正常,編寫一個(gè)測(cè)試類,為了到達(dá)目的,簡(jiǎn)便起見,大象是對(duì)RoleService進(jìn)展測(cè)試,UserService同理類似。在寫測(cè)試用例前,需求在POM文件中參與一個(gè)Srping測(cè)試依賴,這是大象在前面兩章忽略漏掉了,請(qǐng)大家體諒。然后編寫測(cè)試類,運(yùn)轉(zhuǎn)測(cè)試,經(jīng)過(guò)!到此,這一章的內(nèi)容就講完了,假設(shè)有對(duì)注解不了解的地方,請(qǐng)看下我之前的SSH2系列之三,至于MyB
31、atis,它的內(nèi)容太多了,假設(shè)不清楚還請(qǐng)先看下運(yùn)用指南。下一章我將會(huì)引見web層,以及運(yùn)用Spring MVC的注解來(lái)實(shí)現(xiàn)控制器功能。 HYPERLINK /yza3957/article/details/7814627 Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解四 2021-07-31 15:40 607人閱讀 HYPERLINK /yza3957/article/details/7814627 l comments#comments 評(píng)論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLI
32、NK /yza3957/article/details/7814627 l report#report o 告發(fā) 告發(fā) 這一章大象將詳細(xì)分析web層代碼,以及運(yùn)用Spring MVC的注解及其用法和其它相關(guān)知識(shí)來(lái)實(shí)現(xiàn)控制器功能。之前在運(yùn)用Struts2實(shí)現(xiàn)MVC的注解時(shí),是借助struts2-convention這個(gè)插件,如今我們運(yùn)用Spring自帶的spring-webmvc組件來(lái)實(shí)現(xiàn)同樣的功能,而且比之以前更簡(jiǎn)單。另外,還省掉了整合兩個(gè)框架帶來(lái)的不穩(wěn)定要素。對(duì)于Spring MVC框架,我主要講一下它的常用注解,再結(jié)合一些例如進(jìn)展闡明,方便大家可以快速了解。一、Spring MVC常用注講
33、解明Controller在類上面定義,闡明該類為控制器,前往字符串與redirect:xxxRequestMapping在類或方法上面運(yùn)用此注解,設(shè)置URL訪問(wèn)地址。它有兩個(gè)屬性,value指定訪問(wèn)途徑,method指定指定懇求方式,懇求方式在RequestMethod這個(gè)類中,全部以常量方式定義,它默許運(yùn)用GET懇求。RequestParam指定Request懇求參數(shù),在方法參數(shù)中定義,相當(dāng)于傳統(tǒng)的request.getParameter()。PathVariable獲取URL訪問(wèn)途徑變量,這是Spring MVC 3.0框架才參與的特性,基于RESTful風(fēng)格的URL訪問(wèn)途徑。ModelA
34、ttribute全局式的方法,在一組URL訪問(wèn)途徑中,每次都會(huì)執(zhí)行,方法前往結(jié)果保管在module會(huì)話中。Service在類上面定義,指定被注解的類是業(yè)務(wù)邏輯組件,假設(shè)不指定詳細(xì)的Bean ID,那么采用默許命名方式,即類名的首字母小寫。之前在SSH2中,大象曾對(duì)Dao組件運(yùn)用Repository,本例只需業(yè)務(wù)層,所以就只用Service注解。AutowiredIoC自動(dòng)注入功能,交換以前的set寫法,在SSH2中就曾經(jīng)開場(chǎng)運(yùn)用了。Qualifier對(duì)同一接口類有不同實(shí)現(xiàn)指定詳細(xì)的實(shí)現(xiàn)類。ResponseBody同樣定義在方法上,Ajax調(diào)用聲明,指定方法前往結(jié)果為Ajax回調(diào)函數(shù)結(jié)果。這是S
35、pring MVC 3.0框架中添加的一個(gè)新特性。InitBinder初始化數(shù)據(jù)綁定與類型轉(zhuǎn)換,將傳入的參數(shù)轉(zhuǎn)換為自定義類型,或者對(duì)參數(shù)進(jìn)展自定義處置。二、例如RequestMapping在類名上面定義,相當(dāng)于指定的URL是此控制器內(nèi)的一切其它訪問(wèn)途徑的父途徑。假設(shè)在某個(gè)方法上面定義RequestMapping注解,那么相對(duì)于父途徑來(lái)說(shuō),是其子途徑。假設(shè)不定義value值,那么按父途徑訪問(wèn)就會(huì)被默許執(zhí)行。但請(qǐng)留意,默許的訪問(wèn)方式只能有一個(gè)。對(duì)于UserController的list方法REST訪問(wèn)URL為httplocalhost:8080/ssm3/user,而且它同時(shí)接納GET和POST兩
36、種懇求。另外,Spring MVC 3.0有一個(gè)很靈敏的特性,可以自定義方法參數(shù)??纯磍ist方法,我設(shè)定了兩個(gè)參數(shù),一個(gè)Model,一個(gè)User對(duì)象。Model是用來(lái)渲染數(shù)據(jù),生成頁(yè)面用的。相當(dāng)于request.setAttribute,他可以這樣了解,但不能就這樣以為,Model以及另一個(gè)ModelMap,都是作為視圖模型傳送參數(shù)的,它們的作用域?yàn)閞equest。除此之外,他還可以定義HttpServletRequest、HttpServletResponse等等各種各樣的參數(shù)。假設(shè)一個(gè)類還要定義其它資源訪問(wèn)怎樣辦呢?請(qǐng)看下面的RoleController在RoleController上定
37、義了全局途徑/role,這樣一來(lái),對(duì)于和角色相關(guān)的資源都會(huì)以/role開頭,比如創(chuàng)建角色/role/new;編輯角色/role/edit/id等等。上圖edit方法中的id寫法,就是RESTful URL風(fēng)格,與PathVariable搭配來(lái)一同實(shí)現(xiàn)該功能。它表示所懇求的URL中,可以將變量值作為參數(shù)進(jìn)展動(dòng)態(tài)的傳送。例如:localhost:8080/ssm3/role/edit/1,另外,除了可以用數(shù)字,還可以用字符串,還可以多定義幾個(gè)變量:/role/edit/id/type等等。每個(gè)方法的前往值,其實(shí)都對(duì)應(yīng)著一個(gè)結(jié)果頁(yè)面,這一點(diǎn)和struts2-convention這個(gè)插件很相像。本例運(yùn)
38、用FreeMarker模板引擎作為展現(xiàn)層,頁(yè)面的后綴為.html,頁(yè)面中除了規(guī)范的HTML之外,其他的數(shù)據(jù)填充,條件判別之類,都要用到FreeMarker指令。對(duì)于save方法前往值寫法表示的是重定向,相當(dāng)于執(zhí)行httplocalhost:8080/ssm3/role,而這個(gè)URL對(duì)應(yīng)的其實(shí)就是RoleController這個(gè)類里面list方法。假設(shè)要帶上參數(shù)之類的,一定要符合所定義的REST資源途徑才可以。ResponseBody用來(lái)標(biāo)識(shí)Ajax方法調(diào)用,在上面這個(gè)方法中,用到了RequestParam注解,它的作用就和request.getParameter(name)一樣。Spring
39、MVC框架支持好幾種前往格式,例如:String/JSON/XML等等。不過(guò)以這種格式的字符串值方式前往是最簡(jiǎn)便的一種方式,而且利用JavaScript解析也非常方便。頁(yè)面調(diào)用的時(shí)候請(qǐng)用jQuery的$.ajax()這種原生方式來(lái)定義,這種寫法不會(huì)出問(wèn)題,也很靈敏,而且其它幾種方式最終也是調(diào)用它來(lái)完成懇求。對(duì)于擁有一樣的一組訪問(wèn)規(guī)那么的URL,假設(shè)都需求獲得一樣的數(shù)據(jù),那么運(yùn)用ModelAttribute注解。以RoleController為例,上面這個(gè)注解與方法的含義,相當(dāng)于是在它里面一切的訪問(wèn)途徑方法中都調(diào)用這個(gè)寫法:module.addAttribute(“allRoles,roleSe
40、rvice.getRoles()。也即,不論是訪問(wèn)create還是edit,都會(huì)執(zhí)行preperList,都會(huì)獲得allRoles這個(gè)List。注冊(cè)自定義類型編輯器,在Spring MVC中,對(duì)于時(shí)間類型,框架不會(huì)自動(dòng)幫他轉(zhuǎn)換綁定,需求他本人來(lái)定義屬性編輯器。除此之外,還可以對(duì)某些特殊字符進(jìn)展本義符處置,都可以放在InitBinder注解的方法中進(jìn)展。假設(shè)一切的Controller都需求注冊(cè)一樣的屬性編輯器,那么可以實(shí)現(xiàn)WebBindingInitializer接口,定義一個(gè)全局的屬性編輯器。三、在web容器中部署想要讓Spring MVC框架協(xié)助 我們完成任務(wù),就需求在Web容器中配置好它。
41、DispatcherServlet是Spring MVC的中心,是處置一切懇求轉(zhuǎn)發(fā)的中心控制器。大象曾在本系列的第二篇文章中就詳細(xì)描畫了Spring MVC的流程構(gòu)造,假設(shè)沒(méi)什么印象的話請(qǐng)?jiān)偃タ纯?。Spring MVC有一個(gè)默許規(guī)那么,Web容器啟動(dòng)之后,會(huì)自動(dòng)查找/WEB-INF/.xml這個(gè)Spring類型的配置文件。假設(shè)想自定義配置文件途徑,就按上面的寫法,指定contextConfiglocation這個(gè)屬性,大象采用maven構(gòu)建工程,所以servlet-context.xml這個(gè)配置文件放在resource目錄下。四、MVC配置Spring MVC 3.0對(duì)運(yùn)用和配置作了較大的改良
42、,除了提供注解來(lái)簡(jiǎn)化控制器的開發(fā)之外,在配置文件上面也進(jìn)展了簡(jiǎn)化?;赟pring MVC注解的配置就是上面這兩行,還有一種更簡(jiǎn)化的配置寫法是只寫這一句:就可以了,Spring啟動(dòng)的時(shí)候會(huì)自動(dòng)注冊(cè)上面這兩個(gè)bean。為什么大象要在這里顯示的注冊(cè)兩個(gè)bean呢?由于,我們?cè)谡嬲\(yùn)用的時(shí)候,普通來(lái)說(shuō),運(yùn)用默許的方式滿足不了我們的系統(tǒng)或業(yè)務(wù)要求。比如攔截器,比如數(shù)據(jù)驗(yàn)證,比如前往音訊格式轉(zhuǎn)換等等一些自定義設(shè)置。他們都需求配置在這兩個(gè)bean里面。由于本例是用來(lái)作為入門教程,所以這些東西都沒(méi)有加進(jìn)來(lái)。DefaultAnnotationHandlerMapping這個(gè)類是將一切標(biāo)注了RequestMap
43、ping注解的Controller類,都放到了一個(gè)HandlerMapping對(duì)象中,當(dāng)有懇求時(shí),就在這個(gè)對(duì)象中進(jìn)展查找能否有與之匹配的途徑,AnnotationMethodHandlerAdapter是管理一切RequestMapping注解的方法。 HYPERLINK /yza3957/article/details/7814630 Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實(shí)例詳解五 2021-07-31 15:40 155人閱讀 HYPERLINK /yza3957/article/details/7814630 l comments#c
44、omments 評(píng)論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /yza3957/article/details/7814630 l report#report o 告發(fā) 告發(fā) 這是本系列的最后一篇,主要講一下FreeMarker模板引擎的根本概念與常用指令的運(yùn)用方式。一、FreemMarker根本概念FreemMarker是一個(gè)用Java言語(yǔ)編寫的模板引擎,它是一個(gè)基于模板來(lái)生成文本輸出的一個(gè)工具。是除了JSP之外被運(yùn)用得最多的頁(yè)面模板技術(shù)之一,另一個(gè)比較有名的模板那么是Velocity。用戶可以運(yùn)用FreeMarker來(lái)生成所需求
45、的內(nèi)容,通常由Java提供數(shù)據(jù)模型,F(xiàn)reeMarker經(jīng)過(guò)模板引擎渲染數(shù)據(jù)模型,這樣最終得到我們想要的內(nèi)容。運(yùn)用FreeMarker作為展現(xiàn)層,訪問(wèn)速度會(huì)比較快,由于FreeMarker引擎渲染頁(yè)面的時(shí)候,只需求把數(shù)據(jù)填充進(jìn)去就可以了,其它的都是固定的模板內(nèi)容。另外,運(yùn)用FreeMarker可以很方便的動(dòng)態(tài)生成靜態(tài)頁(yè)面,對(duì)于大訪問(wèn)量的網(wǎng)站,配合nginx可以很好的提高網(wǎng)站性能。在ssm3這個(gè)例子中,就是運(yùn)用的FreeMarker模板技術(shù)來(lái)實(shí)現(xiàn)的視圖層。本文主要是對(duì)ssm3例子中所運(yùn)用到的FreeMarker知識(shí)點(diǎn)進(jìn)展引見,其它更詳細(xì)的內(nèi)容還請(qǐng)大家參考官方文檔。在本文的最后有ssm3源碼,有需
46、求的朋友可以自行下載,例子是最根本的,方便入門的朋友學(xué)習(xí)與了解。二、FreemMarker配置闡明在Spring 3.0框架中,曾經(jīng)集成好了FreeMarker,對(duì)它進(jìn)展了適度的封裝,我們運(yùn)用起來(lái)非常方便。要運(yùn)用FreemMarker模板的功能,只需求進(jìn)展下面兩項(xiàng)配置。a、FreemMarker視圖解析器當(dāng)我們發(fā)出REST懇求訪問(wèn)資源時(shí),當(dāng)Controller執(zhí)行終了,需求前往結(jié)果給我們時(shí),那些前往字符串指定的都是結(jié)果頁(yè)面,這時(shí),就經(jīng)過(guò)上面這個(gè)解析器,根據(jù)前往的那些字符串解析成我們?cè)O(shè)計(jì)的頁(yè)面。另外,假設(shè)要運(yùn)用Spring提供的FreeMarker宏,還需求加上exposeSpringMacro
47、Helpers這個(gè)屬性,將它設(shè)為true,他可以將這些宏了解為一種功能,或一個(gè)方法。b、FreemMarker環(huán)境配置上面這段配置設(shè)置了FreeMarker環(huán)境屬性,templateLoaderPath指定模板文件存放的途徑,它相當(dāng)于是定義了模板的前綴,一切顯示的頁(yè)面都遵照這個(gè)途徑規(guī)那么。還指定了模板文件的編碼格式,假設(shè)不顯示配置,否那么會(huì)采用系統(tǒng)默許編碼,這很容易出現(xiàn)亂碼的情況,所以一定要將編碼一致設(shè)置,不要再運(yùn)用gb2312或gbk之類的編碼方式了,采用國(guó)際一致的Unicode UTF-8編碼是比較好的習(xí)慣。除了上面我們看到的這些配置設(shè)置外,F(xiàn)reeMarkerConfigurer還有一個(gè)
48、很重要的屬性是freemarkerVariables,它可以用來(lái)設(shè)置我們本人開發(fā)的自定義指令標(biāo)簽,以滿足不同的業(yè)務(wù)需求。三、FreemMarker指令標(biāo)志要想在最終結(jié)果頁(yè)面中填充數(shù)據(jù),需求用到FreeMarker標(biāo)志指令來(lái)到達(dá)這一目的。不過(guò)這些標(biāo)志指令普通不會(huì)單獨(dú)出現(xiàn),根本上是多個(gè)組合運(yùn)用,為了讓大家方便了解,大象就以ssm3中的一些頁(yè)面為例子進(jìn)展闡明。FreeMarker有兩種類型:預(yù)定義指令和用戶自定義指令。預(yù)定義指令是以#號(hào)開頭,用戶自定義的指令那么運(yùn)用開頭。而Spring的FreeMarker宏也是以開頭。指令assign表示定義一個(gè)變量,它的格式是,在這里ctx是變量名name,va
49、lue可以是一個(gè)值,也可以是一個(gè)表達(dá)式。還記得FreeMarker解析器中我們?cè)O(shè)置的requestContextAttribute屬性為rc吧,我們?nèi)缃窬褪怯盟鼇?lái)獲得我們運(yùn)用上下文,我們的運(yùn)用名為ssm3,所以這里就是獲得這個(gè)值,將它賦給ctx,上面這些都寫在meta.html這個(gè)模板頁(yè)面中,這樣我們就可以在一切模板頁(yè)中援用這個(gè)變量。在表達(dá)式中,運(yùn)用了一個(gè)!符號(hào),它的作用是假設(shè)rc.getContextPath()為null或不存在,就將字符串/ssm3作為默許值賦給變量ctx。這樣,即使萬(wàn)一由于某些緣由無(wú)法獲得上下文值,我們的ctx變量也不會(huì)因此而出現(xiàn)空值或不正確的值,從而引起系統(tǒng)異常。在運(yùn)用FreeMarker時(shí),一定要留意一點(diǎn),F(xiàn)reeMarker絕不允許援用不存在的變量即變量為null,除非明確地通知它當(dāng)變量不存在null時(shí)如何處置。上面這一點(diǎn)非常重
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年版礦產(chǎn)資源探礦權(quán)出讓合同范本(含礦產(chǎn)資源勘查風(fēng)險(xiǎn)分擔(dān))3篇
- 2025年度內(nèi)蒙古草原生態(tài)旅游承包經(jīng)營(yíng)合同3篇
- 2025年度音樂(lè)教育項(xiàng)目藝人授課合同3篇
- 二零二五年度文化旅游綜合體租賃合同書3篇
- 年度單抗導(dǎo)向藥物戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 二零二五年度東易日盛跑路事件客戶賠償與調(diào)解合同3篇
- 2024瑜伽館瑜伽教練勞動(dòng)合同范本及教練與學(xué)員溝通規(guī)范3篇
- 二零二五版“520”荔枝電商法治講堂講師聘用合同3篇
- 2024版建筑水電分包合同范本
- 二零二五年度房產(chǎn)評(píng)估咨詢合同樣本4篇
- 人教版八年級(jí)下冊(cè)第一單元英語(yǔ)Unit1 單元設(shè)計(jì)
- PEP小學(xué)六年級(jí)英語(yǔ)上冊(cè)選詞填空專題訓(xùn)練
- 古建筑修繕項(xiàng)目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學(xué)元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經(jīng)理的人力資源管理培訓(xùn)(新版)課件
- MSDS物質(zhì)安全技術(shù)資料-201膠水
- 鉬氧化物還原過(guò)程中的物相轉(zhuǎn)變規(guī)律及其動(dòng)力學(xué)機(jī)理研究
- (完整word)2019注冊(cè)消防工程師繼續(xù)教育三科試習(xí)題及答案
- 《調(diào)試件現(xiàn)場(chǎng)管理制度》
- 社區(qū)治理現(xiàn)代化課件
評(píng)論
0/150
提交評(píng)論