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框架的項目?
※如何用最簡單的方式解釋依賴注入?依賴注入是如何實現解耦的?