ssm和ssh區別及對比


1.什么是ssh?

SSH是 struts+spring+hibernate的一個集成框架,是目前比較流行的一種Web應用程序開源框架。

2.什么是ssm?

SSM框架,是Spring + Spring MVC + MyBatis的縮寫,這個是繼SSH之后,目前比較主流的Java EE企業級框架,適用於搭建各種大型的企業級應用系統。

1.Spring簡介

Spring是一個開源框架,Spring是於2003年興起的一個輕量級的Java開發框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

A.控制反轉(IOC)是什么呢?

IOC:控制反轉也叫依賴注入。利用了工廠模式將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓spring容器來生成類的實例對象以及管理對象。在spring容器啟動的時候,spring會把你在配置文件中配置的bean都初始化好,然后在你需要調用的時候,就把它已經初始化好的那些bean分配給你需要調用這些bean的類(假設這個類名是A),分配的方法就是調用A的setter方法來注入,而不需要你在A里面new這些bean了。
[注意]:面試的時候,如果有條件,畫圖,這樣更加顯得你懂了

B.面向切面(AOP)又是什么呢?

首先,需要說明的一點,AOP只是Spring的特性,它就像OOP一樣是一種編程思想,並不是某一種技術,AOP可以說是對OOP的補充和完善。OOP引入封裝、繼承和多態性等概念來建立一種對象層次結構,用以模擬公共行為的一個集合。當我們需要為分散的對象引入公共行為的時候,OOP則顯得無能為力。也就是說,OOP允許你定義從上到下的關系,但並不適合定義從左到右的關系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關系。在OOP設計中,它導致了大量代碼的重復,而不利於各個模塊的重用。將程序中的交叉業務邏輯(比如安全,日志,事務等),封裝成一個切面,然后注入到目標對象(具體業務邏輯)中去。

實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。

[簡單點解釋],比方說你想在你的biz層所有類中都加上一個打印‘你好,AOP’的功能這你經可以用aop思想來做,你先寫個類寫個方法,方法經實現打印‘你好,AOP’讓后你Ioc這個類 ref=“biz.*”讓每個類都注入。

2.Spring MVC簡介

Spring MVC屬於Spring Framework的后續產品,已經融合在Spring Web Flow里面,它原生支持的Spring特性,讓開發變得非常簡單規范。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。

3.MyBatis簡介

MyBatis本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis使用簡單的XML或注解用於配置和原始映射,將接口和Java的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。可以這么理解,MyBatis是一個用來幫你管理數據增刪改查的框架。

3.hibernate和mybatis區別

   Hibernate 框架 
        Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,建立對象與數據庫表的映射。 是一個全自動的、完全面向對象的持久層框架。
    1.2     Mybatis框架
        Mybatis是一個開源對象關系映射框架,原名:ibatis,2010年由谷歌接管以后更名。 是一個半自動化的持久層框架。

MyBatis因為具有封裝少,映射多樣化,支持存儲過程,可以進行SQL優化等特點。使得它取代了Hibernate成為了java互聯網中首選的持久框架。

無論MyBatis或Hibernate都可以稱為ORM框架,Hibernate的設計理念是完全面向POJO的,而MyBatis不是。
Hibernate基本不再需要編寫SQL就可以通過映射關系來操作數據庫,是一種全表映射的體現,而MyBatis需要我們提供SQL去運行。程序員不用精通SQL,只要懂得操作POJO就能夠操作對應數據庫的表。

在管理系統時代,首先是實現業務邏輯,然后才是性能,所以Hibernate在當時是主流。

在移動互聯網時代,MyBatis是首選,不屏蔽SQL,程序員可以自己制定SQL規則,能更加精確定義SQL,從而優化性能。更符合移動互聯網高並發,大數據,高性能,高響應的要求。

Hiberate和MyBatis的增、刪、查、改.對於業務邏輯層來說大同小異,對於映射層而言Hibemate的配置不需要接口和SQL.相反MyBatis是需要的。對於Hibermate而言,不需要編寫大量的SQL,就可以完全映射,同時提供了日志、緩存、級聯(級聯比MyBatis強大)等特性,此外還提供HQL (Hibemate Query Language)對POIO進行操作,使用十分方便,但是它也有致命的缺陷。

由於無須SQL,當多表關聯超過3個的時候,通過Hibermate的級聯會造成太多性能的丟失,又或者我現在訪問一個財 務的表,然后它會關聯財產信息表,財產又分為機械、原料等.顯然機械和原料的字段是不一樣的,這樣關聯字段只能根據特定的條件 變化而變化,而Hibermate無法支持這樣的變化。遇到存儲過程,Hibemate只能作罷。更為關鍵的是性能,在管理系統的時代,對於性能的要求不是那么苛刻,但是在互聯網時代性能就是系統的根本,響應過慢就會喪失客戶,試想一下誰會去用一個經常需要等待超過10 秒以上的應用呢?

以上的問題MyBatis都可以解決,MyBatis 可以自由書寫SQL、支持動態SQL、處理列表、動態生成表名,支持存儲過程。這樣就可以靈活地定義查詢語句,滿足各類需求和性能優化的需要,這些在互聯網系統中是十分重要的。

但MyBatis也有缺陷。首先,它要編寫SQL和映射規則,其工作量稍微大於 Hibemate.其次,它支持的工具也很有限,不能像Hibemate那樣有許多的插件可以幫助生成映射代碼和關聯關系,而即使使用生成工具,往往也需要開發者進一步簡化, MyBatis 通過手工編碼,工作量相對大些。所以對於性能要求不太苛刻的系統,比如管理系統、ERP 等推薦使用Hibemate;而對於性能要求高、響應快、靈活的系統則推薦使用MyBatis.

 

兩者區別

     2.1 開發方面
        在項目開發過程當中,就速度而言:
            hibernate開發中,sql語句已經被封裝,直接可以使用,加快系統開發;
            Mybatis 屬於半自動化,sql需要手工完成,稍微繁瑣;
        但是,凡事都不是絕對的,如果對於龐大復雜的系統項目來說,發雜語句較多,選擇hibernate 就不是一個好方案。
     2.2 sql優化方面
        Hibernate 自動生成sql,有些語句較為繁瑣,會多消耗一些性能;
        Mybatis 手動編寫sql,可以避免不需要的查詢,提高系統性能;
     2.3 對象管理比對
        Hibernate 是完整的對象-關系映射的框架,開發工程中,無需過多關注底層實現,只要去管理對象即可;
        Mybatis 需要自行管理 映射關系;
    2.4 緩存方面    

相同點:

Hibernate和Mybatis的二級緩存除了采用系統默認的緩存機制外,都可以通過實現你自己的緩存或為其他第三方緩    存方案,創建適配器來完全覆蓋緩存行為。

不同點:

Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然后再在具體的表-對象映射中配置是那種緩存。

MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制。並且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。


 

比較:

          Hibernate 具有良好的管理機制,用戶不需要關注SQL,如果二級緩存出現臟數據,系統會保存,;
           Mybatis 在使用的時候要謹慎,避免緩存CAche 的使用。

Hibernate優勢

  1. Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。

  2. Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。

  3. Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。

  4. Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。

Mybatis優勢

  1. MyBatis可以進行更為細致的SQL優化,可以減少查詢字段。

  2. MyBatis容易掌握,而Hibernate門檻較高。

一句話總結

Mybatis:小巧、方便、高效、簡單、直接、半自動化

Hibernate:強大、方便、高效、復雜、間接、全自動化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM