首頁  >  文章  >  php教程  >  Mybatis與Ibatis的差別

Mybatis與Ibatis的差別

高洛峰
高洛峰原創
2017-01-05 17:18:232177瀏覽

Mybatis與Ibatis的區別: 
1、Mybatis實現了介面綁定,使用更方便 
在ibatis2.x中我們需要在DAO的實現類別中指定具體對應哪個xml映射文件, 
而Mybatis實現了DAO接口與xml映射檔案的綁定,自動為我們產生介面的具體實現,使用起來變得更加省事和方便。 
這可以說是Mybatis最重要的進步。

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

2、物件關係映射的改進,效率更高 
相信許多在使用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,不過一對一映射為什麼也不允許就不太明白了。可能是因為一對一是一對多的特例,而在設計框架的時候並沒有考慮去處理或是難於處理這一特例吧。

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

可能較關心的是 
Mybatis實現了介面綁定,使用更加方便。 
iBatis / MyBatis 3提供了一個新的功能:註解。


更多Mybatis與Ibatis的區別相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn