Mybatis與ibatis的區別

2021-06-22 14:10:26 字數 1411 閱讀 8224

隨著開發團隊轉投google code旗下,ibatis3.x正式更名為mybatis

雖然從正式版發布至今也有近一年時間,官方也非常友好的提供了中文版的使用手冊,不過相信很多人還在專案中使用ibatis2.x版本。

究竟mybatis有哪些新特性,能給我們帶來哪些好處呢?以下是我看一位大俠研究後

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與ibatis的區別 1 mybatis實現了介面繫結,使用更加方便 在ibatis2.x中我們需要在dao的實現類中指定具體對應哪個xml對映檔案,而mybatis實現了dao介面與xml對映檔案的繫結,自動為我們生成介面的具體實現,使用起來變得更加省事和方便。這可以說是mybati...

Mybatis與Ibatis的區別

mybatis與ibatis的區別 1 mybatis實現了介面繫結,使用更加方便 在ibatis2.x中我們需要在dao的實現類中指定具體對應哪個xml對映檔案,而mybatis實現了dao介面與xml對映檔案的繫結,自動為我們生成介面的具體實現,使用起來變得更加省事和方便。這可以說是mybati...

ibatis與mybatis中 和 的區別

我們在ibatis和mybatis中編寫sql語句時,經常需要用到變數替換,ibatis是mybatis的前身,所以很多東西都很相似 例如 和 在兩者中都可以用來變數替換,但是 僅僅是簡單的字元拼接,它是直接進行值替換,而且容易被sql注入,而 是根據值的型別來進行替換 select from ta...