淺析Mybatis與Hibernate的區別與用途

有很長一段時間對mybatis是比較陌生的,只知道與Hibernate同樣是個orm數據庫框架。隨着使用熟練度的增長,發現它與Hibernate區別是很是大的,應當結合不一樣的狀況分析選用。結合至今爲止的經驗,總結出如下幾點:
1. hibernate是全自動,而mybatis是半自動
hibernate徹底能夠經過對象關係模型實現對數據庫的操做,擁有完整的JavaBean對象與數據庫的映射結構來自動生成sql。而mybatis僅有基本的字段映射,對象數據以及對象實際關係仍然須要經過手寫sql來實現和管理。
2. hibernate數據庫移植性遠大於mybatis
hibernate經過它強大的映射結構和hql語言,大大下降了對象與數據庫(oracle、mysql等)的耦合性,而mybatis因爲須要手寫sql,所以與數據庫的耦合性直接取決於程序員寫sql的方法,若是sql不具通用性而用了不少某數據庫特性的sql語句的話,移植性也會隨之下降不少,成本很高。
3. hibernate擁有完整的日誌系統,mybatis則欠缺一些
hibernate日誌系統很是健全,涉及普遍,包括:sql記錄、關係異常、優化警告、緩存提示、髒數據警告等;而mybatis則除了基本記錄功能外,功能薄弱不少。
4. mybatis相比hibernate須要關心不少細節
hibernate配置要比mybatis複雜的多,學習成本也比mybatis高。但也正由於mybatis使用簡單,才致使它要比hibernate關心不少技術細節。mybatis因爲不用考慮不少細節,開發模式上與傳統jdbc區別很小,所以很容易上手並開發項目,但忽略細節會致使項目前期bug較多,於是開發出相對穩定的軟件很慢,而開發出軟件卻很快。hibernate則正好與之相反。可是若是使用hibernate很熟練的話,實際上開發效率絲絕不差於甚至超越mybatis。
5. sql直接優化上,mybatis要比hibernate方便不少
因爲mybatis的sql都是寫在xml裏,所以優化sql比hibernate方便不少。而hibernate的sql不少都是自動生成的,沒法直接維護sql;雖有hql,但功能仍是不及sql強大,見到報表等變態需求時,hql也歇菜,也就是說hql是有侷限的;hibernate雖然也支持原生sql,但開發模式上卻與orm不一樣,須要轉換思惟,所以使用上不是很是方便。總之寫sql的靈活度上hibernate不及mybatis。mysql

隨着使用狀況的不斷增多,我又作了進一步的總結總結:
mybatis:小巧、方便、高效、簡單、直接、半自動
hibernate:強大、方便、高效、複雜、繞彎子、全自動程序員

mybatis:
1. 入門簡單,即學即用,提供了數據庫查詢的自動對象綁定功能,並且延續了很好的SQL使用經驗,對於沒有那麼高的對象模型要求的項目來講,至關完美。
2. 能夠進行更爲細緻的SQL優化,能夠減小查詢字段。
3. 缺點就是框架仍是比較簡陋,功能尚有缺失,雖然簡化了數據綁定代碼,可是整個底層數據庫查詢實際仍是要本身寫的,工做量也比較大,並且不太容易適應快速數據庫修改。
4. 二級緩存機制不佳。
hibernate:
1. 功能強大,數據庫無關性好,O/R映射能力強,若是你對Hibernate至關精通,並且對Hibernate進行了適當的封裝,那麼你的項目整個持久層代碼會至關簡單,須要寫的代碼不多,開發速度很快,很是爽。
2. 有更好的二級緩存機制,可使用第三方緩存。
3. 缺點就是學習門檻不低,要精通門檻更高,並且怎麼設計O/R映射,在性能和對象模型之間如何權衡取得平衡,以及怎樣用好Hibernate方面須要你的經驗和能力都很強才行。
舉個形象的比喻:
mybatis:機械工具,使用方便,拿來就用,但工做仍是要本身來做,不過工具是活的,怎麼使由我決定。
hibernate:智能機器人,但研發它(學習、熟練度)的成本很高,工做均可以擺脫他了,但僅限於它能作的事。
 sql

相關文章
相關標籤/搜索