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區別
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.
兩者區別
相同點: Hibernate和Mybatis的二級緩存除了采用系統默認的緩存機制外,都可以通過實現你自己的緩存或為其他第三方緩 存方案,創建適配器來完全覆蓋緩存行為。 不同點: Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然后再在具體的表-對象映射中配置是那種緩存。 MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制。並且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。 |
比較:
Hibernate優勢
-
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
-
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
-
Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
-
Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。
Mybatis優勢
-
MyBatis可以進行更為細致的SQL優化,可以減少查詢字段。
-
MyBatis容易掌握,而Hibernate門檻較高。
一句話總結
Mybatis:小巧、方便、高效、簡單、直接、半自動化
Hibernate:強大、方便、高效、復雜、間接、全自動化