2019最新Java Web J2EE下的兩大框架SSH和SSM對比
當下流行的兩種企業開發MVC開源框架,是我們Java程式猿必備知識能力。MVC,即模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。框架之所以流行,在於其易複用和簡化開發,精髓在思想,掌握了核心思想,我們掌握其他類似框架也不會有問題,建議大家有精力的話讀一下框架原始碼,尤其是spring。
SSH和SSM定義
SSH 通常指的是 Struts2 做控制器(controller),spring 管理各層的元件,hibernate
SSM 則指的是 SpringMVC 做控制器(controller),Spring 管理各層的元件,MyBatis 負責持久化層。
共同點:1.Spring依賴注入DI來管理各層的元件。2.使用面向切面程式設計AOP管理事物、日誌、許可權等。
不同點:1.Struts2 和 SpringMVC 控制器(controller)控制檢視和模型的互動機制的不同,
Struts2是Action類級別,SpringMVC是方法級別,更容易實現RESTful風格。
SSH 和 SSM 的實現原理
1.Struts2 的實現原理
Struts2框架執行步驟(Struts2使用Filter嵌入):
1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的整合很有幫助
3、接著FilterDispatcher被呼叫,FilterDispatcher詢問ActionMapper來決定這個請求是否需要呼叫某個Action
4、如果ActionMapper決定需要呼叫某個Action,FilterDispatcher把請求的處理交給ActionProxy
5、ActionProxy通過Configuration Manager詢問框架的配置檔案,找到需要呼叫的Action類
6、ActionProxy建立一個ActionInvocation的例項。
7、ActionInvocation例項使用命名模式來呼叫,在呼叫Action的過程前後,涉及到相關攔截器(Intercepter)的呼叫。
8、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。
9、將處理結果返回給客戶端
2.SpringMVC 的實現原理
SpringMVC框架執行步驟(SpringMVC使用Servlet嵌入):
1、客戶端發出一個http請求給web伺服器,web伺服器對http請求進行解析,如果匹配DispatcherServlet的請求對映路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet.
2、DipatcherServlet接收到這個請求之後將根據請求的資訊(包括URL、Http方法、請求報文頭和請求引數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)。
3-4、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的呼叫。
5、Handler對資料處理完成以後將返回一個ModelAndView()物件給DispatcherServlet。
6、Handler返回的ModelAndView()只是一個邏輯檢視並不是一個正式的檢視,DispatcherSevlet通過ViewResolver將邏輯檢視轉化為真正的檢視View。
7、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+】,本群專用於學習交流技術、分享面試機會,拒絕廣告,我也會在群內不定