Mybatis與Ibatis比較

隨着開發團隊轉投Google Code旗下,ibatis3.x正式改名爲Mybatis 
雖然從正式版發佈至今也有近一年時間,官方也很是友好的提供了中文版的使用手冊,不過相信不少人還在項目中使用ibatis2.x版本。 
究竟Mybatis有哪些新特性,能給咱們帶來哪些好處呢?如下是我看一位大俠研究後

一、Mybatis實現了接口綁定,使用更加方便。 
在ibatis2.x中咱們須要在DAO的實現類中指定具體對應哪一個xml映射文件, 
而Mybatis實現了DAO接口與xml映射文件的綁定,自動爲咱們生成接口的具體實現,使用起來變得更加省事和方便。 
這能夠說是Mybatis最重要的改進。 

注意: 
雖然Mybatis支持在接口中直接使用annotation的配置方式來簡化配置, 
不過強烈建議仍然使用xml配置的方式。畢竟annotation的配置方式功能有限且代碼入侵性太強。使用xml配置方式才能體現出Mybatis的優點所在 

二、對象關係映射的改進,效率更高 
相信不少在使用ibatis2.x的朋友並無經過ibatis的xml映射文件來實現對象間的關係映射。其實也確實沒有必要那麼作,由於ibatis2.x採用的是「嵌套查詢」的方式將對象之間的關係經過查詢語句的直接拼裝來實現,其效果和在DAO或Service中自行封裝是同樣的。 
不過這種方式存在「N+1查詢問題」。 
歸納地講,N+1查詢問題能夠是這樣引發的: 
? 你執行了一個單獨的SQL語句來獲取結果列表(就是+1)。 
? 對返回的每條記錄,你執行了一個查詢語句來爲每一個加載細節(就是N)。 
這個問題會致使成百上千的SQL語句被執行。這一般不是指望的。 

而在Mybatis中,除了兼容ibatis2.x中的「嵌套查詢」方式外,還提供了直接「嵌套結果」的方式,其效果至關於直接經過一句sql將查詢出的dto對象自動封裝成所需的對象。 
具體實現方法請自行參考Mybatis官方使用手冊,不在此累述. 

不過實際上這一改進所帶來的好處也是頗有限的。由於這一方式在使用分頁的時候並不起做用,或者說嵌套對象的結果集是不容許進行分頁的。這一點在Mybatis框架中已經作出了明確的限制(org.apache.ibatis.executor.resultset.NestedResultSetHandler裏34行),而實際項目中須要分頁的狀況又特別多…… 
仔細一想,一對多映射確實不能經過配置文件來分頁,由於這時查詢出的記錄數並不等於實際返回對象的size,不過一對一映射爲何也不容許就不太明白了。多是由於一對一是一對多的特例,而在設計框架的時候並無考慮去處理或是難於處理這一特例吧。 

三、MyBatis採用功能強大的基於OGNL的表達式來消除其餘元素。 
熟悉struts2的人應該對OGNL表達式不會感到陌生, 
MyBatis採用OGNL表達式簡化了配置文件的複雜性,使用起來更簡潔。 


sql

可能較爲關心的是apache

Mybatis實現了接口綁定,使用更加方便。框架

iBatis / MyBatis 3提供了一個新的功能:的註解。spa

http://jc-dreaming.iteye.com/admin/blogs/1003781設計

相關文章
相關標籤/搜索