Mybatis與Ibatis的區(qū)別
Mybatis與Ibatis的區(qū)別:
1、Mybatis實現(xiàn)了接口綁定,使用更加方便
在ibatis2.x中我們需要在DAO的實現(xiàn)類中指定具體對應(yīng)哪個xml映射文件,
而Mybatis實現(xiàn)了DAO接口與xml映射文件的綁定,自動為我們生成接口的具體實現(xiàn),使用起來變得更加省事和方便。
這可以說是Mybatis最重要的改進(jìn)。
注意:
雖然Mybatis支持在接口中直接使用annotation的配置方式來簡化配置,
不過強(qiáng)烈建議仍然使用xml配置的方式。畢竟annotation的配置方式功能有限且代碼入侵性太強(qiáng)。使用xml配置方式才能體現(xiàn)出Mybatis的優(yōu)勢所在
2、對象關(guān)系映射的改進(jìn),效率更高
相信很多在使用ibatis2.x的朋友并沒有通過ibatis的xml映射文件來實現(xiàn)對象間的關(guān)系映射。其實也確實沒有必要那么做,因為ibatis2.x采用的是“嵌套查詢”的方式將對象之間的關(guān)系通過查詢語句的直接拼裝來實現(xiàn),其效果和在DAO或Service中自行封裝是一樣的。
不過這種方式存在“N+1查詢問題”。
概括地講,N+1查詢問題可以是這樣引起的:
? 你執(zhí)行了一個單獨的SQL語句來獲取結(jié)果列表(就是+1)。
? 對返回的每條記錄,你執(zhí)行了一個查詢語句來為每個加載細(xì)節(jié)(就是N)。
這個問題會導(dǎo)致成百上千的SQL語句被執(zhí)行。這通常不是期望的。
而在Mybatis中,除了兼容ibatis2.x中的“嵌套查詢”方式外,還提供了直接“嵌套結(jié)果”的方式,其效果相當(dāng)于直接通過一句sql將查詢出的dto對象自動封裝成所需的對象。
具體實現(xiàn)方法請自行參考Mybatis官方使用手冊,不在此累述.
不過實際上這一改進(jìn)所帶來的好處也是很有限的。因為這一方式在使用分頁的時候并不起作用,或者說嵌套對象的結(jié)果集是不允許進(jìn)行分頁的。這一點在Mybatis框架中已經(jīng)做出了明確的限制(org.apache.ibatis.executor.resultset.NestedResultSetHandler里34行),而實際項目中需要分頁的情況又特別多……
仔細(xì)一想,一對多映射確實不能通過配置文件來分頁,因為這時查詢出的記錄數(shù)并不等于實際返回對象的size,不過一對一映射為什么也不允許就不太明白了??赡苁且驗橐粚σ皇且粚Χ嗟奶乩?,而在設(shè)計框架的時候并沒有考慮去處理或是難于處理這一特例吧。
3、MyBatis采用功能強(qiáng)大的基于OGNL的表達(dá)式來消除其他元素
熟悉struts2的人應(yīng)該對OGNL表達(dá)式不會感到陌生,
MyBatis采用OGNL表達(dá)式簡化了配置文件的復(fù)雜性,使用起來更簡潔。
可能較為關(guān)心的是
Mybatis實現(xiàn)了接口綁定,使用更加方便。
iBatis / MyBatis 3提供了一個新的功能:注解。
相關(guān)文章
無感NullPointerException的值相等判斷方法
當(dāng)我們需要去判斷一個?入?yún)?查庫?返回的開關(guān)變量(通常是個Integer類型的)時,常常會寫如下的if-else判斷語句。但又會為在生產(chǎn)環(huán)境看到的「NullPointerException」感到困擾,遇到這個問題如何處理呢,下面小編通過本文給大家詳細(xì)講解,需要的朋友參考下吧2023-02-02Java基于深度優(yōu)先遍歷的隨機(jī)迷宮生成算法
今天小編就為大家分享一篇關(guān)于Java基于深度優(yōu)先遍歷的隨機(jī)迷宮生成算法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02java DataInputStream和DataOutputStream詳解及實例代碼
這篇文章主要介紹了java DataInputStream和DataOutputStream詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01java JTree JCheckBox樹復(fù)選框詳解
這篇文章主要為大家詳細(xì)介紹了java JTree JCheckBox樹復(fù)選框的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11SpringBoot整合Javamail實現(xiàn)郵件發(fā)送功能
郵件發(fā)送是一個很普遍的功能,springboot整合了相關(guān)的starter,本文給大家介紹了可以實現(xiàn)一個簡單的郵件發(fā)送功能的實例,文中通過代碼給大家介紹的非常詳細(xì),感興趣的朋友可以參考下2023-12-12簡單介紹區(qū)分applet和application的方法
applet和application都是Java語言編寫出來的應(yīng)用程序,本文簡單介紹了二者的不同之處,需要的朋友可以參考下2017-09-09Java?JVM虛擬機(jī)調(diào)優(yōu)詳解
JVM是JavaVirtualMachine(Java虛擬機(jī))的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機(jī),是通過在實際的計算機(jī)上仿真模擬各種計算機(jī)功能來實現(xiàn)的,本文主要介紹了jvm調(diào)優(yōu),感興趣的小伙伴們可以參考一下<BR>2022-07-07mybatisPlus條件構(gòu)造器常用方法小結(jié)
這篇文章主要介紹了mybatisPlus條件構(gòu)造器常用方法,首先是.select和其他條件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10Android應(yīng)用開發(fā)之將SQLite和APK一起打包的方法
這篇文章主要介紹了Android應(yīng)用開發(fā)之將SQLite和APK一起打包的方法,文章時間較早,盡管現(xiàn)在開發(fā)環(huán)境已大都遷移至Android Studio上,但打包原理依然相同,需要的朋友可以參考下2015-08-08