search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

手把手教你 基礎 整合最優雅SSM框架:SpringMVC + Spring

我們看招聘信息的時候,經常會看到這一點,需要具備SSH框架的技能;而且在大部分教學課堂中,也會把SSH作為最核心的教學內容。 但是,我們在實際應用中發現,SpringMVC可以完全替代Struts,配合註解的方式,編程非常快捷,而且通過restful風格定義url,讓地址看起來非常優雅。 另外,MyBatis也可以替換Hibernate,正因為MyBatis的半自動特點,我們程序猿可以完全掌控SQL,這會讓有資料庫經驗的程序猿能開發出高效率的SQL語句,而且XML配置管理起來也非常方便。 好了,如果你也認同我的看法,那麼下面我們一起來做整合吧!

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

  • SpringMVC:它用於web層,相當於controller(等價於傳統的servlet和struts的action),用來處理用戶請求。舉個例子,用戶在地址欄輸入http://網站域名/login,那麼springmvc就會攔截到這個請求,並且調用controller層中相應的方法,(中間可能包含驗證用戶名和密碼的業務邏輯,以及查詢資料庫操作,但這些都不是springmvc的職責),最終把結果返回給用戶,並且返回相應的頁面(當然也可以只返回json/xml等格式數據)。springmvc就是做前面和後面過程的活,與用戶打交道!!

  • Spring:太強大了,以至於我無法用一個詞或一句話來概括它。但與我們平時開發接觸最多的估計就是IOC容器,它可以裝載bean(也就是我們java中的類,當然也包括service dao裡面的),有了這個機制,我們就不用在每次使用這個類的時候為它初始化,很少看到關鍵字new。另外spring的aop,事務管理等等都是我們經常用到的。

  • MyBatis:如果你問我它跟鼎鼎大名的Hibernate有什麼區別?我只想說,他更符合我的需求。第一,它能自由控制sql,這會讓有資料庫經驗的人(當然不是說我啦捂臉)編寫的代碼能搞提升資料庫訪問的效率。第二,它可以使用xml的方式來組織管理我們的sql,因為一般程序出錯很多情況下是sql出錯,別人接手代碼后能快速找到出錯地方,甚至可以優化原來寫的sql。

  • 請容小編髮條小東西哈,不要介意!

  • 獲取源碼,項目講解,知識點分享,學習交流,那就加入小編的Java學習交流群吧!

  • 616 959 444

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

首先我們打開IED,我這裡用的是eclipse(你們應該也是用的這個,對嗎?),創建一個動態web項目,建立好相應的目錄結構(重點!)

(打了馬賽克是因為這裡還用不到,你們不要那麼污好不好?)

我說一下每個目錄都有什麼用吧(第一次畫表格,我發現markdown的表格語法很不友好呀~) 這個目錄結構同時也遵循maven的目錄規範~

文件名作用
src根目錄,沒什麼好說的,下面有main和test。
main主要目錄,可以放java代碼和一些資源文件。
java存放我們的java代碼,這個文件夾要使用Build Path -> Use as Source Folder,這樣看包結構會方便很多,新建的包就相當於在這裡新建文件夾咯。
resources存放資源文件,譬如各種的spring,mybatis,log配置文件。
mapper存放dao中每個方法對應的sql,在這裡配置,無需寫daoImpl。
spring這裡當然是存放spring相關的配置文件,有dao service web三層。
sql其實這個可以沒有,但是為了項目完整性還是加上吧。
webapp這個貌似是最熟悉的目錄了,用來存放我們前端的靜態資源,如jsp js css。
resources這裡的資源是指項目的靜態資源,如js css images等。
WEB-INF很重要的一個目錄,外部瀏覽器無法訪問,只有羨慕內部才能訪問,可以把jsp放在這裡,另外就是web.xml了。你可能有疑問了,為什麼上面java中的resources裡面的配置文件不妨在這裡,那麼是不是會被外部竊取到?你想太多了,部署時候基本上只有webapp里的會直接輸出到根目錄,其他都會放入WEB-INF裡面,項目內部依然可以使用classpath:XXX來訪問,好像IDE里可以設置部署輸出目錄,這裡扯遠了~
test這裡是測試分支。
java測試java代碼,應遵循包名相同的原則,這個文件夾同樣要使用Build Path -> Use as Source Folder,這樣看包結構會方便很多。
resources沒什麼好說的,好像也很少用到,但這個是maven的規範。

我先新建好幾個必要的包,並為大家講解一下每個包的作用,順便理清一下後台的思路~

包名名稱作用dao數據訪問層(介面)與數據打交道,可以是資料庫操作,也可以是文件讀寫操作,甚至是redis緩存操作,總之與數據操作有關的都放在這裡,也有人叫做dal或者數據持久層都差不多意思。為什麼沒有daoImpl,因為我們用的是mybatis,所以可以直接在配置文件中實現介面的每個方法。entity實體類一般與資料庫的表相對應,封裝dao層取出來的數據為一個對象,也就是我們常說的pojo,一般只在dao層與service層之間傳輸。dto數據傳輸層剛學框架的人可能不明白這個有什麼用,其實就是用於service層與web層之間傳輸,為什麼不直接用entity(pojo)?其實在實際開發中發現,很多時間一個entity並不能滿足我們的業務需求,可能呈現給用戶的信息十分之多,這時候就有了dto,也相當於vo,記住一定不要把這個混雜在entity裡面,答應我好嗎?service業務邏輯(介面)寫我們的業務邏輯,也有人叫bll,在設計業務介面時候應該站在「使用者」的角度。額,不要問我為什麼這裡沒顯示!IDE調皮我也拿它沒辦法~serviceImpl業務邏輯(實現)實現我們業務介面,一般事務控制是寫在這裡,沒什麼好說的。web控制器springmvc就是在這裡發揮作用的,一般人叫做controller控制器,相當於struts中的action。

還有最後一步基礎工作,導入我們相應的jar包,我使用的是maven來管理我們的jar,所以只需要在

pom.xml

中加入相應的依賴就好了,如果不使用maven的可以自己去官網下載相應的jar,放到項目WEB-INF/lib目錄下。關於maven的學習大家可以看慕課網的視頻教程,這裡就不展開了。我把項目用到的jar都寫在下面,版本都不是最新的,大家有經驗的話可以自己調整版本號。另外,所有jar都會與項目一起打包放到我的github上,喜歡的給個star吧~

下面真的要開始進行編碼工作了,堅持到這裡辛苦大家了~

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

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

  • 讀入資料庫連接相關參數(可選)

  • 配置數據連接池

  • 配置連接屬性,可以不讀配置項文件直接在這裡寫死

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

  • 配置SqlSessionFactory對象(mybatis)

  • 掃描dao層介面,動態實現dao介面,也就是說不需要daoImpl,sql和參數都寫在xml文件上

因為資料庫配置相關參數是讀取配置文件,所以在resources文件夾里新建一個

jdbc.properties文件,存放我們4個最常見的資料庫連接屬性,這是我本地的,大家記得修改呀~還有喜歡傳到github上「大頭蝦們」記得刪掉密碼,不然別人就很容易得到你伺服器的資料庫配置信息,然後干一些羞羞的事情,你懂的!!

配置文件中的jdbc.username,如果寫成username,可能會與系統環境中的username變數衝突,所以到時候真正連接資料庫的時候,用戶名就被替換成系統中的用戶名(有得可能是administrator),那肯定是連接不成功的,這裡有個小坑,我被坑了一晚上!!

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

  • 使用自增主鍵

  • 使用列別名

  • 開啟駝峰命名轉換 create_time -> createTime

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

spring

文件夾里新建

spring-service.xml

文件。

掃描service包所有註解 @Service

配置事務管理器,把事務管理交由spring來完成

配置基於註解的聲明式事務,可以直接在方法上@Transaction

spring-service.xml

  • 獲取源碼,項目講解,知識點分享,學習交流,那就加入小編的Java學習交流群吧!

  • 616 959 444

第三步:配置web層,在

spring-web.xml

文件。

  • 開啟SpringMVC註解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等

  • 對靜態資源處理,如js,css,jpg等

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

  • 掃描web層 @Controller

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

我們在項目中經常會使用到日誌,所以這裡還有配置日誌xml,在resources文件夾里新建logback.xml文件,所給出的日誌輸出格式也是最基本的控制台s呼出。

到目前為止,我們一共寫了7個配置文件,我們一起來看下最終的配置文件結構圖。

好了,今天就寫到這裡了!內容是有點長哈,不過感興趣想學的小夥伴還請堅持觀看呀!

接下來會跟大家講這種框架的應用實例哦!想知道我會用什麼來實例嗎?

  • 獲取本篇完整版內容,學習交流,那就加入小編的Java學習交流群吧!

  • 616 959 444

欲知後續如何,請聽下回分解!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦