一、前言
SM框架是標准的MVC模式,將整個系統划分為四層:View層,Controller層,Service層,Dao層
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內容)。常作為數據源較簡單的web項目的框架。
Spring運用IOC和AOP思想實現業務對象管理
Spring MVC主要負責請求的轉發和視圖管理
Mybatis封裝JDBC作為數據對象的持久化引擎
二、來自百度百科介紹:
Spring
Spring的核心思想是IoC(控制反轉),即不再需要程序員去顯式地`new`一個對象,而是讓Spring框架幫你來完成這一切。
SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前台這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作。SpringMVC相當於SSH框架中struts。Mybatis
mybatis是對jdbc的封裝,它讓數據庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射。在每次與數據庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令。整合
三、大白話
1、Spring
在java里面,要用類里面的方法,就需要先有類的對象,而類的對象就是new出來
Spring就是用來簡化這一步操作的框架
Spring是一個容器,里面裝了很多Bean即實體對象。之后要用到這些對象對應的類的方法,可以直接從容器里面拿,就不用再去new一個了
2、SpringMVC
首先理解好servlet是什么?
Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。參考下:https://www.runoob.com/servlet/servlet-intro.html
反正就是用來處理業務邏輯層的一個東西,能夠處理在前端頁面發起的請求
而SpringMVC也是這樣一個作用
SpringMVC是一個控制器+視圖分發器,處理業務邏輯層,最接近用戶的東西。
當用戶在頁面做了某個操作,理解為發起一個請求,這個請求會被送到SpringMVC這個控制器,根據對於業務邏輯的理解來決定后端要做出什么操作(比如要從數據庫增刪改查還是展示什么到前端頁面),相當於servlet的功能
舉一個簡單的例子,我在瀏覽器輸入了一竄網址,然后回車。這個過程瀏覽器將我的網址從客戶端(C)輸入通過TCP/UDP等傳輸到了服務器(S),然后Tomcat根據我輸入的網址判斷它是屬於哪個Servlet,並且從這個網址上截取某些參數給選中的Servlet。
Servlet 是S與C之間的中間層,會根據拿到的參數判斷要采取什么操作,這里它通過判斷知道我是要打開一個網站(這里好像就是mappper到對應的controller)。這里就是業務邏輯層,這是我們自己寫的代碼。接下來就由視圖分發器給我們返回我們想要的網址到C上
到此為止,Servlet是作為一個控制器,起到了攔截用戶請求並執行具體對應請求所執行的操作(專業點說就是將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作)。在SpringMVC中,它的核心Servlet即DispatcherServlet。這個框架其實就是整合了Servlet該起的作用。
3、MyBatis
正常來說,我們寫java程序的時候,與數據庫交互式這么寫。先寫代碼connection鏈接數據庫,然后寫sql語句被調用到數據庫中執行。具體與數據庫的交互其實就是增刪改查
而現在MyBatis就是對這些增刪改查進行封裝,即對jdbc的封裝,這是一個數據庫框架。我們配置好MyBatics后,就可以調用了,不用再去寫代碼考慮怎么連接數據庫,怎么執行sql語句
上面專業的解釋說,mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。sqlSessionFactory相當於用戶和數據庫的橋梁,它就是一個sql工廠,了解工廠模式的我們知道,工廠里面會有很多個sqlSession,當我們拿到一個sqlSession,然后才執行sql命令。
我們用sql語句寫的表,每一個表對應一個Mapper.xml文件,具體的增刪改查寫在Mapper.xml文件里面,它被調用的時候幫我們執行sql語句和返回數據,注意sql語句是要我們自己寫的。
與它相似又常用的框架還有Hibernate,這里就不說了。
4、整合
上面說:頁面發送請求給控制器,控制器調用業務層處理邏輯,邏輯層向持久層發送請求,持久層與數據庫交互,后將結果返回給業務層,業務層將處理邏輯發送給控制器,控制器再調用視圖展現數據。
擴充下我的理解:頁面發送請求給控制器(控制器,進入SpringMVC范圍了),控制器調用業務層處理邏輯,邏輯層向持久層發送請求,持久層與數據庫交互(就是MyBatis起作用了),后將結果返回給業務層,業務層將處理邏輯發送給控制器,控制器再調用視圖展現數據(視圖分發器,是SpringMVC起作用)。這個過程中,Spring作為一個容器,將整個過程囊括進去了。