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 的實現原理

SSH和SSM對比總結

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 的實現原理

SSH和SSM對比總結

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優化方面較弱,且入門門檻稍高。

ssh 和 ssm的區別
1、MVC的實現方式不同
2、ORM持久化方面不同
3、SSM注重輕量級配置,將註解開發發揮到了極致,且ORM實現靈活,SQL優化簡便
SSH注重配置開發,Hibernate實現對JDBC的完整封裝,對增刪改查的數據維護更加自動化,但是SQL優化方面較弱,且上手比較有難度


SSH指的是:spring+Struts+hibernate;而SSM指的是:spring +SpringMVC + MyBatis。
1、Spring是是開源框架,是輕量級的IoC和AOP的容器框架,主要是針對javaBean的生命週期進行管理的輕量級容器,可以單獨使用,也可以和Struts框架,ibatis框架等組合使用。
1)IoC(Inversion of Control)控制反轉,對象創建責任的反轉,在spring中BeanFacotory是IoC容器的核心接口,負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。XmlBeanFacotory實現BeanFactory接口,通過獲取xml配置文件數據,組成應用對象及對象間的依賴關係。Spring中有三種注入方式,一種是set注入,一種是接口注入,另一種是構造方法注入。
2)AOP面向切面編程
aop就是縱向的編程,如果業務1和業務2都需要一個共同的操作,與其往每個業務中都添加同樣的代碼,不如寫一遍代碼,讓兩個業務共同使用這段代碼。
spring中面向切面變成的實現有兩種方式,一種是動態代理,一種是CGLIB,動態代理必須要提供接口,而CGLIB實現是有繼承。
Spring框架優點
1)輕量級的容器框架沒有侵入性
2)使用IoC容器更加容易組合對象直接間關係,面向接口編程,降低耦合
3)Aop可以更加容易的進行功能擴展,遵循ocp開發原則
4)創建對象默認是單例的,不需要再使用單例模式進行處理
2、SpringMVC與Struts :
1)兩者有個共同之處,那就是兩者都數據javaweb層的開發框架,都是mvc模式的的經典產品,都實現了頁面分離控制的功能,但是兩者之間是有區別的。
2)在開發中,人們更願意使用SpringMVC而不是Struts。因爲SpringMVC分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定製。在擴展和靈活性上更勝一籌。
3)Struts的優勢在於靜態注入,插件機制和攔截器鏈,但是struts存在漏洞,經常會被作爲攻擊點進行衝擊。相比更加安全簡單的SpringMVC,開發者漸漸開發放棄了它。
3、Hibernate 與MyBatis:
1)Hibernate與Mybatis都是流行的持久層開發框架,一句話概括:MyBatis 簡單易上手;
2)hibernate成熟,市場推廣率高。
3)MyBatis可以進行更爲細緻的SQL優化,可以減少查詢字段。
4)MyBatis容易掌握,而Hibernate門檻較高。
5)更重要的是,mybatis提供了對應各種用途、功能的插件,而hibernate在這一方面是遠遠比不上mybatis的。
6)Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
7)Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
8)Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
9)Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。
10)但是hibernat缺點很明確,如果涉及到多張關聯表的調用時:
1. 多表關聯等比較複雜,使用的成本並不低;
2. 效率比較低,在大型項目中很少會使用到它,因爲sql都是自動生成的,不太好進行人工的優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章