SSM三層架構

什麼是SSM框架?

SSM是Spring+Spring MVC+Mybatis的縮寫,主流的Java EE企業級框架。

其中,Spring是一個輕量級的控制反轉(IOC)和麵向切面(AOP)的容器框架,可以幫助我們建立物件。

Spring MVC控制開發,讓開發簡單規範。

MyBatis是一個基於Java的持久層框架,封裝了增刪改查操作。

Spring

看到這個,很多人會和你說什麼控制反轉(IoC),依賴注入(DI)、AOP、事務什麼……對新手來說,這些是什麼鬼呢?

控制反轉

我不寫定義,就說一下你的電腦。你的電腦上有usb口吧,有hdmi口吧。電腦上用什麼鍵盤,不取決於電腦本身,而是插在usb上的鍵盤是什麼?這個能理解吧。你看控制電腦用什麼輸入的裝置並不是由電腦控制的,而是你插入的鍵盤是什麼來控制的。這個控制不就反了嗎?

依賴注入

就是控制反轉。電腦的輸入裝置依賴它被插入的是什麼鍵盤。插入機械鍵盤,輸入裝置就是機械鍵盤,插入數字鍵盤就只能輸入數字。從插鍵盤這個事來說:無非是從電腦角度看,是依賴注入,輸入裝置是什麼依賴注入的鍵盤是什麼;從鍵盤角度看是控制反轉,插入的鍵盤來控制電腦是什麼輸入裝置。

為什麼要用依賴注入?目的就是可以靈活搭配。如果你的電腦上的鍵盤是焊死在電腦上的,鍵盤壞了,你的電腦也廢了。你肯定不想這樣吧。

Java開發中,我們需要建立大量的物件,有些重要的物件牽一髮而動全身,這樣的物件我們可以交給Spring幫我們來建立,我們只需要提供配置檔案,這個配置檔案可以是xml,也可以是java本身。好比Spring是個工廠,按圖紙就可以做出產品。

AOP

什麼是切面?你可以這樣想:一個公司有多個銷售部,都需要行政幫忙搞定日常的訂文具、機票、辦公室、出差酒店什麼的,都需要財務搞定報銷、收付款什麼的事務吧,要倉庫幫忙發貨什麼的。不可能每個銷售部都去招幾個行政、財務和倉管什麼吧,銷售部門只要做好業務就行了,訂文具什麼的事情交個專門的部門去辦就行。

在Spring AOP 中,把這些公共的事務,也就是這個例子中的行政啊、財務啊、倉管啊,看成一個個切面,讓你的開發的時候,專注於核心業務。

事務

說個例子:比如我支付寶轉給你100塊錢,正常操作應該是我的賬號裡少了100,你的多了100。如果由於各種原因,我少100後,系統出問題了。沒有事務的話,你的賬號不會多100,而我的賬號少了100。這個就是有問題了。有事務的話:要不我少100你多100都成功,要不就都不成功,這樣錢才不會少。而手寫一個事務還是有點小難度的,Spring的事務(spring-tx)可以幫我們輕鬆實現。

Spring MVC

這個的話,你要先理解一下MVC是什麼?

C- Controller:控制器。接受使用者請求,呼叫 Model 處理,然後選擇合適的View給客戶。

M- Model:模型。業務處理模型,接受Controller的調遣,處理業務,處理資料。

V- View:檢視。返回給客戶看的結果。注意這裡的客戶未必是人,可能是瀏覽器,可能是APP。

這樣想必你不明白,舉例:你去飯店吃飯,坐下來後,服務員小妹來找你點菜。你點了個宮保雞丁,小妹就拿著你的點選單都後廚。後廚的師傅開啟食物儲藏櫃,找到雞丁,開爐子,放油,一頓爆炒,裝盤。小妹端起盤子回到你的桌子。當然,如果小妹覺得你帥,說不定還會偷偷加個雞腿給你;如果你碰巧是當年甩了小妹的前男友,說不定小妹會吐口口水在裡面。

這裡,你就是客戶,你點菜就是發出請求(Request),小妹就是Controller,後廚就是 Model,小妹最後給的盤子及裡面的內容就是View,小妹給你盤子就是響應(Respond)。Controller處理客戶請求,反饋給Model。Model處理,返回資料(宮保雞丁)給Controller(小妹)。小妹可以直接給你,也可以給你加雞腿或吐口水後給你。最終,你得到了一盤吃的(View)。

Spring MVC就是個MVC框架,和Spring天生就整合。

MyBatis

一個幫你和資料庫打交道的框架。幫你把資料庫的表翻譯成類,欄位翻譯成類的欄位,記錄翻譯成物件。(當然這些全要靠你自己定義。)

這樣做的後果就是,你可以像寫java一樣操作資料庫了。什麼開啟JDBC,防止sql注入,不用考慮,MyBatis幫你搞定。

Spring中,透過簡單的設定就可以整合MyBatis這個框架,所以會有SSM框架的說法。

如果我們把 SSM + 另外一些功能的框架看成一臺臺式電腦,主機上插了鍵盤、滑鼠、顯示器、優盤、音響……那麼 Spring 框架好像是電腦的主機,Spring MVC類似於顯示器(Web互動很漂亮,對不對),MyBatis好比是個硬碟(行動硬碟、優盤),其他的功能框架如安全框架 Shiro 好比是個指紋登入器。這些東西是不是都是插主機上的?

三層架構

三層架構師指:檢視層view,服務層service,持久層Dao,它們的功能是:

1。view層:用來接收使用者請求的程式碼,比如請求如何分發;

2。service層:系統的業務邏輯主要寫在這裡,比如借書系統會有借書的業務;

3。Dao層:直接操作資料庫的程式碼,之所以分Dao層,主要是可能相同的sql語句可能使用在比較多的地方,改動的時候可以理解為只改動一處即可。

為了降低耦合度,在這裡,使用面向抽象程式設計,也就是上層對下層的呼叫,直接透過介面來完成,下層對上層的真正服務提供者,是下層實現的介面實現類,實現類是可以更換的,這就實現了層間的解耦合。

MVC與三層架構的區別

MVC架構裡面的Controller以及View層合併在一起就是三層架構的View層,而MVC的Model層就包含了三層架構的Service層以及Dao層。