當下流行的兩種企業開發MVC開源框架,是咱們Java程序猿必備知識能力。MVC,即模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。框架之因此流行,在於其易複用和簡化開發,精髓在思想,掌握了核心思想,咱們掌握其餘相似框架也不會有問題,建議你們有精力的話讀一下框架源碼,尤爲是spring。web
SSH和SSM定義面試
SSH 一般指的是 Struts2 作控制器(controller),spring 管理各層的組件,hibernate 負責持久化層。spring
SSM 則指的是 SpringMVC 作控制器(controller),Spring 管理各層的組件,MyBatis 負責持久化層。數據庫
共同點:1.Spring依賴注入DI來管理各層的組件。2.使用面向切面編程AOP管理事物、日誌、權限等。編程
不一樣點:1.Struts2 和 SpringMVC 控制器(controller)控制視圖和模型的交互機制的不一樣,緩存
Struts2是Action類級別,SpringMVC是方法級別,更容易實現RESTful風格。服務器
SSH 和 SSM 的實現原理架構
1.Struts2 的實現原理app
Struts2框架執行步驟(Struts2使用Filter嵌入):框架
一、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
二、這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助
三、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否須要調用某個Action
四、若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
五、ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類
六、ActionProxy建立一個ActionInvocation的實例。
七、ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。
八、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果一般是(但不老是,也可 能是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。
九、將處理結果返回給客戶端
2.SpringMVC 的實現原理
SpringMVC框架執行步驟(SpringMVC使用Servlet嵌入):
一、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,若是匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.
二、DipatcherServlet接收到這個請求以後將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找處處理請求的處理器(Handler)。
3-四、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用。
五、Handler對數據處理完成之後將返回一個ModelAndView()對象給DispatcherServlet。
六、Handler返回的ModelAndView()只是一個邏輯視圖並非一個正式的視圖,DispatcherSevlet經過ViewResolver將邏輯視圖轉化爲真正的視圖View。
七、Dispatcher經過model解析出ModelAndView()中的參數進行解析最終展示出完整的view並返回給客戶端。
Hibernate 和 MyBatis 兩種ORM框架對比
二者的相同點
Hibernate與MyBatis均可以是經過SessionFactoryBuider由XML配置文件生成SessionFactory,而後由SessionFactory 生成Session,最後由Session來開啓執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差很少的。
Hibernate和MyBatis都支持JDBC和JTA事務處理。
二者各自優點
MyBatis能夠進行更爲細緻的SQL優化,能夠減小查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
Hibernate的DAO層開發比MyBatis簡單,Mybatis須要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性很差,不一樣的數據庫須要寫不一樣SQL。
Hibernate有更好的二級緩存機制,可使用第三方緩存。MyBatis自己提供的緩存機制不佳,更新操做不能指定刷新指定記錄,會清空整個表,可是也可使用第三方緩存。
Hibernate 封裝性好,屏蔽了數據庫差別,自動生成SQL語句,應對數據庫變化能力較弱,SQL語句優化困難。
MyBatis僅實現了SQL語句和對象的映射,須要針對具體的數據庫寫SQL語句,應對數據庫變化能力較強,SQL語句優化較爲方便。
總結
SSM和SSH不一樣主要在MVC實現方式,以及ORM持久化方面不一樣(Hiibernate與Mybatis)。SSM愈來愈輕量級配置,將註解開發發揮到極致,且ORM實現更加靈活,SQL優化更簡便;而SSH較注重配置開發,其中的Hiibernate對JDBC的完整封裝更面向對象,對增刪改查的數據維護更自動化,但SQL優化方面較弱,且入門門檻稍高。
以爲不錯請點贊支持,歡迎留言或進個人我的羣855801563領取【架構資料專題目合集90期】、【BATJTMD大廠JAVA面試真題1000+】,本羣專用於學習交流技術、分享面試機會,拒絕廣告,我也會在羣內不按期答題、探討。