MyBatis不是完整的ORM框架?

ORM是Object和Relation之間的映射,包括Object-&>Relation和Relation-&>Object兩方面。Hibernate是個完整的ORM框架,而MyBatis完成的是Relation-&>Object,也就是其所說的data mapper framework


JPA是orm框架標準,主流的orm框架都實現了這個標準。

MyBatis沒有實現JPA,他和orm框架的設計思路完全不一樣。

MyBatis是擁抱sql,而orm則更靠近面向對象,不建議寫sql,實在要寫推薦你寫hql代替。

Mybatis是sql mapping框架而不是orm框架,當然orm和Mybatis都是持久層框架。


之前只用過hibernate,在後來接觸了Mybatis,簡單將兩者對比了一下發現,Mybatis不是完整的ORM,或者說只是半自動的ORM,下面筆者為大家簡要說明一下原因及兩者之間的對比。

Hibernate是全自動ORM框架,而Mybatis是半自動的。hibernate完全可以通過對象關係模型實現對資料庫的操作,擁有完整的JavaBean對象與資料庫的映射結構來自動生成sql。而mybatis僅有基本的欄位映射,對象數據以及對象實際關係仍然需要通過手寫sql來實現和管理。

hibernate資料庫移植性遠大於mybatis。 hibernate通過它強大的映射結構和hql語言,大大降低了對象與資料庫(oracle、mysql等)的耦合性,而mybatis由於需要手寫sql,因此與資料庫的耦合性直接取決於程序員寫sql的方法,如果sql不具通用性而用了很多某資料庫特性的sql語句的話,移植性也會隨之降低很多,成本很高。

hibernate擁有完整的日誌系統,mybatis則欠缺一些。hibernate日誌系統非常健全,涉及廣泛,包括:sql記錄、關係異常、優化警告、緩存提示、臟數據警告等;而mybatis則除了基本記錄功能外,功能薄弱很多。

緩存方面都可以使用第三方緩存,但是Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然後再在具體的表-對象映射中配置是那種緩存,而Mybatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制。並且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。

系統數據處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經過高度優化的sql語句(或存儲過程)才能達到系統性能設計指標,在這種情況下Mybatis會有更好的可控性和表現,可以進行細粒度的優化。

以上就是這對此問題的回答,如有欠缺之處還請見諒,若需要更多的技術交流,可以關注公眾號:程序員交流學習


Mybatis是OXM設計 不是對象關係映射 你用過就知道 只是用xml標記然後用java查找佔位符 說白了就是給你在java和sql之間提供更靈活的映射方案


你自問自答,還帶分析,到底是什麼意思?


推薦閱讀:

怎麼閱讀Spring源碼?
關於spring,mybatis,mvc等等框架?
如何理解 ssh 三大框架?
Github上有沒有關於springmvc框架的項目?
如何用最簡單的方式解釋依賴注入?依賴注入是如何實現解耦的?

TAG:Java | Spring | Hibernate | JavaWeb | MyBatis |