手把手教你 基礎(chǔ) 整合最優(yōu)雅SSM框架:SpringMVC + Spring

我們看招聘信息的時候,經(jīng)常會看到這一點这溅,需要具備SSH框架的技能;而且在大部分教學(xué)課堂中棒仍,也會把SSH作為最核心的教學(xué)內(nèi)容悲靴。 但是,我們在實際應(yīng)用中發(fā)現(xiàn)莫其,SpringMVC可以完全替代Struts癞尚,配合注解的方式,編程非陈叶福快捷浇揩,而且通過restful風(fēng)格定義url,讓地址看起來非常優(yōu)雅憨颠。 另外胳徽,MyBatis也可以替換Hibernate积锅,正因為MyBatis的半自動特點,我們程序猿可以完全掌控SQL养盗,這會讓有數(shù)據(jù)庫經(jīng)驗的程序猿能開發(fā)出高效率的SQL語句缚陷,而且XML配置管理起來也非常方便。 好了往核,如果你也認(rèn)同我的看法蹬跃,那么下面我們一起來做整合吧!

請點擊此處輸入圖片描述

在寫代碼之前我們先了解一下這三個框架分別是干什么的铆铆? 相信大以前也看過不少這些概念蝶缀,我這就用大白話來講,如果之前有了解過可以跳過這一大段薄货,直接看代碼翁都!

SpringMVC:它用于web層,相當(dāng)于controller(等價于傳統(tǒng)的servlet和struts的action)谅猾,用來處理用戶請求柄慰。舉個例子,用戶在地址欄輸入http://網(wǎng)站域名/login税娜,那么springmvc就會攔截到這個請求坐搔,并且調(diào)用controller層中相應(yīng)的方法,(中間可能包含驗證用戶名和密碼的業(yè)務(wù)邏輯敬矩,以及查詢數(shù)據(jù)庫操作概行,但這些都不是springmvc的職責(zé)),最終把結(jié)果返回給用戶弧岳,并且返回相應(yīng)的頁面(當(dāng)然也可以只返回json/xml等格式數(shù)據(jù))凳忙。springmvc就是做前面和后面過程的活,與用戶打交道G菥妗涧卵!

Spring:太強大了,以至于我無法用一個詞或一句話來概括它腹尖。但與我們平時開發(fā)接觸最多的估計就是IOC容器柳恐,它可以裝載bean(也就是我們java中的類,當(dāng)然也包括service dao里面的)热幔,有了這個機制乐设,我們就不用在每次使用這個類的時候為它初始化,很少看到關(guān)鍵字new断凶。另外spring的aop伤提,事務(wù)管理等等都是我們經(jīng)常用到的。

MyBatis:如果你問我它跟鼎鼎大名的Hibernate有什么區(qū)別认烁?我只想說肿男,他更符合我的需求介汹。第一,它能自由控制sql舶沛,這會讓有數(shù)據(jù)庫經(jīng)驗的人(當(dāng)然不是說我啦捂臉)編寫的代碼能搞提升數(shù)據(jù)庫訪問的效率嘹承。第二,它可以使用xml的方式來組織管理我們的sql如庭,因為一般程序出錯很多情況下是sql出錯叹卷,別人接手代碼后能快速找到出錯地方,甚至可以優(yōu)化原來寫的sql坪它。

請容小編發(fā)條小東西哈骤竹,不要介意!

獲取源碼往毡,項目講解蒙揣,知識點分享,學(xué)習(xí)交流开瞭,那就加入小編的Java學(xué)習(xí)交流群吧懒震!

616 959 444

SSM框架整合配置

好了,前面bb那么多嗤详,下面我們真正開始敲代碼了~

首先我們打開IED个扰,我這里用的是eclipse(你們應(yīng)該也是用的這個,對嗎葱色?)递宅,創(chuàng)建一個動態(tài)web項目,建立好相應(yīng)的目錄結(jié)構(gòu)(重點6病)

請點擊此處輸入圖片描述

(打了馬賽克是因為這里還用不到恐锣,你們不要那么污好不好?)

我說一下每個目錄都有什么用吧(第一次畫表格舞痰,我發(fā)現(xiàn)markdown的表格語法很不友好呀~) 這個目錄結(jié)構(gòu)同時也遵循maven的目錄規(guī)范~

文件名作用

src根目錄,沒什么好說的诀姚,下面有main和test响牛。

main主要目錄,可以放java代碼和一些資源文件赫段。

java存放我們的java代碼呀打,這個文件夾要使用Build Path -> Use as Source Folder,這樣看包結(jié)構(gòu)會方便很多糯笙,新建的包就相當(dāng)于在這里新建文件夾咯贬丛。

resources存放資源文件,譬如各種的spring给涕,mybatis豺憔,log配置文件额获。

mapper存放dao中每個方法對應(yīng)的sql,在這里配置恭应,無需寫daoImpl抄邀。

spring這里當(dāng)然是存放spring相關(guān)的配置文件,有dao service web三層昼榛。

sql其實這個可以沒有境肾,但是為了項目完整性還是加上吧。

webapp這個貌似是最熟悉的目錄了胆屿,用來存放我們前端的靜態(tài)資源奥喻,如jsp js css。

resources這里的資源是指項目的靜態(tài)資源非迹,如js css images等环鲤。

WEB-INF很重要的一個目錄,外部瀏覽器無法訪問彻秆,只有羨慕內(nèi)部才能訪問楔绞,可以把jsp放在這里,另外就是web.xml了唇兑。你可能有疑問了酒朵,為什么上面java中的resources里面的配置文件不妨在這里,那么是不是會被外部竊取到扎附?你想太多了蔫耽,部署時候基本上只有webapp里的會直接輸出到根目錄,其他都會放入WEB-INF里面留夜,項目內(nèi)部依然可以使用classpath:XXX來訪問匙铡,好像IDE里可以設(shè)置部署輸出目錄,這里扯遠(yuǎn)了~

test這里是測試分支碍粥。

java測試java代碼鳖眼,應(yīng)遵循包名相同的原則,這個文件夾同樣要使用Build Path -> Use as Source Folder嚼摩,這樣看包結(jié)構(gòu)會方便很多钦讳。

resources沒什么好說的,好像也很少用到枕面,但這個是maven的規(guī)范愿卒。

我先新建好幾個必要的包,并為大家講解一下每個包的作用潮秘,順便理清一下后臺的思路~

請點擊此處輸入圖片描述

包名名稱作用

dao數(shù)據(jù)訪問層(接口)與數(shù)據(jù)打交道琼开,可以是數(shù)據(jù)庫操作,也可以是文件讀寫操作枕荞,甚至是redis緩存操作柜候,總之與數(shù)據(jù)操作有關(guān)的都放在這里搞动,也有人叫做dal或者數(shù)據(jù)持久層都差不多意思。為什么沒有daoImpl改橘,因為我們用的是mybatis滋尉,所以可以直接在配置文件中實現(xiàn)接口的每個方法。

entity實體類一般與數(shù)據(jù)庫的表相對應(yīng)飞主,封裝dao層取出來的數(shù)據(jù)為一個對象狮惜,也就是我們常說的pojo险毁,一般只在dao層與service層之間傳輸割按。

dto數(shù)據(jù)傳輸層剛學(xué)框架的人可能不明白這個有什么用晾捏,其實就是用于service層與web層之間傳輸叁征,為什么不直接用entity(pojo)?其實在實際開發(fā)中發(fā)現(xiàn)意鲸,很多時間一個entity并不能滿足我們的業(yè)務(wù)需求廓鞠,可能呈現(xiàn)給用戶的信息十分之多口四,這時候就有了dto魁瞪,也相當(dāng)于vo穆律,記住一定不要把這個混雜在entity里面,答應(yīng)我好嗎导俘?

service業(yè)務(wù)邏輯(接口)寫我們的業(yè)務(wù)邏輯峦耘,也有人叫bll,在設(shè)計業(yè)務(wù)接口時候應(yīng)該站在“使用者”的角度旅薄。額辅髓,不要問我為什么這里沒顯示!IDE調(diào)皮我也拿它沒辦法~

serviceImpl業(yè)務(wù)邏輯(實現(xiàn))實現(xiàn)我們業(yè)務(wù)接口少梁,一般事務(wù)控制是寫在這里洛口,沒什么好說的。

web控制器springmvc就是在這里發(fā)揮作用的凯沪,一般人叫做controller控制器第焰,相當(dāng)于struts中的action。

還有最后一步基礎(chǔ)工作妨马,導(dǎo)入我們相應(yīng)的jar包樟遣,我使用的是maven來管理我們的jar,所以只需要在

pom.xml

中加入相應(yīng)的依賴就好了身笤,如果不使用maven的可以自己去官網(wǎng)下載相應(yīng)的jar,放到項目WEB-INF/lib目錄下葵陵。關(guān)于maven的學(xué)習(xí)大家可以看慕課網(wǎng)的視頻教程液荸,這里就不展開了。我把項目用到的jar都寫在下面脱篙,版本都不是最新的娇钱,大家有經(jīng)驗的話可以自己調(diào)整版本號伤柄。另外,所有jar都會與項目一起打包放到我的github上文搂,喜歡的給個star吧~

pom.xml

請點擊此處輸入圖片描述

下面真的要開始進(jìn)行編碼工作了适刀,堅持到這里辛苦大家了~

第一步:我們先在spring文件夾里新建

spring-dao.xml文件,因為spring的配置太多煤蹭,我們這里分三層笔喉,分別是dao service web。

讀入數(shù)據(jù)庫連接相關(guān)參數(shù)(可選)

配置數(shù)據(jù)連接池

配置連接屬性硝皂,可以不讀配置項文件直接在這里寫死

配置c3p0常挚,只配了幾個常用的

配置SqlSessionFactory對象(mybatis)

掃描dao層接口,動態(tài)實現(xiàn)dao接口稽物,也就是說不需要daoImpl奄毡,sql和參數(shù)都寫在xml文件上

spring-dao.xm

請點擊此處輸入圖片描述

因為數(shù)據(jù)庫配置相關(guān)參數(shù)是讀取配置文件,所以在resources文件夾里新建一個

jdbc.properties文件贝或,存放我們4個最常見的數(shù)據(jù)庫連接屬性吼过,這是我本地的,大家記得修改呀~還有喜歡傳到github上“大頭蝦們”記得刪掉密碼咪奖,不然別人就很容易得到你服務(wù)器的數(shù)據(jù)庫配置信息盗忱,然后干一些羞羞的事情,你懂的I募琛售淡!

jdbc.properties

請點擊此處輸入圖片描述

友情提示:

配置文件中的jdbc.username,如果寫成username慷垮,可能會與系統(tǒng)環(huán)境中的username變量沖突揖闸,所以到時候真正連接數(shù)據(jù)庫的時候,用戶名就被替換成系統(tǒng)中的用戶名(有得可能是administrator)料身,那肯定是連接不成功的汤纸,這里有個小坑,我被坑了一晚上G垩贮泞!

因為這里用到了mybatis,所以需要配置mybatis核心文件幔烛,在recources文件夾里新建mybatis-config.xml文件啃擦。

使用自增主鍵

使用列別名

開啟駝峰命名轉(zhuǎn)換 create_time -> createTime

mybatis-config.xml

請點擊此處輸入圖片描述

第二步:剛弄好dao層,接下來到service層了饿悬。在

spring

文件夾里新建

spring-service.xml

文件令蛉。

掃描service包所有注解 @Service

配置事務(wù)管理器,把事務(wù)管理交由spring來完成

配置基于注解的聲明式事務(wù),可以直接在方法上@Transaction

spring-service.xml

獲取源碼珠叔,項目講解蝎宇,知識點分享,學(xué)習(xí)交流祷安,那就加入小編的Java學(xué)習(xí)交流群吧姥芥!

616 959 444

第三步:配置web層,在spring文件夾里新建spring-web.xml文件汇鞭。

開啟SpringMVC注解模式凉唐,可以使用@RequestMapping,@PathVariable虱咧,@ResponseBody等

對靜態(tài)資源處理熊榛,如js,css腕巡,jpg等

配置jsp 顯示ViewResolver玄坦,例如在controller中某個方法返回一個string類型的"login",實際上會返回"/WEB-INF/login.jsp"

掃描web層 @Controller

spring-web.xml

第四步:最后就是修改web.xml文件了绘沉,它在webapp的WEB-INF下煎楣。

web.xml

請點擊此處輸入圖片描述

我們在項目中經(jīng)常會使用到日志,所以這里還有配置日志xml车伞,在resources文件夾里新建logback.xml文件择懂,所給出的日志輸出格式也是最基本的控制臺s呼出。

logback.xml

請點擊此處輸入圖片描述

到目前為止另玖,我們一共寫了7個配置文件困曙,我們一起來看下最終的配置文件結(jié)構(gòu)圖。

請點擊此處輸入圖片描述

好了谦去,今天就寫到這里了慷丽!內(nèi)容是有點長哈,不過感興趣想學(xué)的小伙伴還請堅持觀看呀鳄哭!

接下來會跟大家講這種框架的應(yīng)用實例哦要糊!想知道我會用什么來實例嗎?

獲取本篇完整版內(nèi)容妆丘,學(xué)習(xí)交流锄俄,那就加入小編的Java學(xué)習(xí)交流群吧!

616 959 444

欲知后續(xù)如何勺拣,請聽下回分解奶赠!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市药有,隨后出現(xiàn)的幾起案子车柠,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竹祷,死亡現(xiàn)場離奇詭異,居然都是意外死亡羊苟,警方通過查閱死者的電腦和手機塑陵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜡励,“玉大人令花,你說我怎么就攤上這事×挂校” “怎么了兼都?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稽寒。 經(jīng)常有香客問我扮碧,道長,這世上最難降的妖魔是什么杏糙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任慎王,我火速辦了婚禮,結(jié)果婚禮上宏侍,老公的妹妹穿的比我還像新娘赖淤。我一直安慰自己,他們只是感情好谅河,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布咱旱。 她就那樣靜靜地躺著,像睡著了一般绷耍。 火紅的嫁衣襯著肌膚如雪吐限。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天锨天,我揣著相機與錄音毯盈,去河邊找鬼。 笑死病袄,一個胖子當(dāng)著我的面吹牛搂赋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播益缠,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脑奠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幅慌?” 一聲冷哼從身側(cè)響起宋欺,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后齿诞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酸休,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年祷杈,在試婚紗的時候發(fā)現(xiàn)自己被綠了斑司。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡但汞,死狀恐怖宿刮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情私蕾,我是刑警寧澤僵缺,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站踩叭,受9級特大地震影響磕潮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懊纳,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一揉抵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗤疯,春花似錦冤今、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脚囊,卻和暖如春龟糕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悔耘。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工讲岁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衬以。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓缓艳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親看峻。 傳聞我的和親對象是個殘疾皇子阶淘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容