Mybatis與Ibatis的區(qū)別:?
1、Mybatis實(shí)現(xiàn)了介面綁定,使用更方便?
在ibatis2.x中我們需要在DAO的實(shí)現(xiàn)類別中指定具體對應(yīng)哪個(gè)xml映射文件,?
而Mybatis實(shí)現(xiàn)了DAO接口與xml映射檔案的綁定,自動(dòng)為我們產(chǎn)生介面的具體實(shí)現(xiàn),使用起來變得更加省事和方便。?
這可以說是Mybatis最重要的進(jìn)步。
注意:?
雖然Mybatis支援在介面中直接使用annotation的設(shè)定方式來簡化配置,?
不過強(qiáng)烈建議仍使用xml配置的方式。畢竟annotation的配置方式功能有限且程式碼入侵性太強(qiáng)。使用xml設(shè)定方式才能體現(xiàn)Mybatis的優(yōu)點(diǎn)所??在
2、物件關(guān)係映射的改進(jìn),效率更高?
相信許多在使用ibatis2.x的朋友並沒有透過ibatis的xml映射檔來實(shí)現(xiàn)物件間的關(guān)係映射。其實(shí)也確實(shí)沒有必要那麼做,因?yàn)閕batis2.x採用的是「巢狀查詢」的方式將物件之間的關(guān)係透過查詢語句的直接拼裝來實(shí)現(xiàn),其效果和在DAO或Service中自行封裝是一樣的。?
不過這種方式有「N+1查詢問題」。?
概括地講,N+1查詢問題可以是這樣造成的:?
? 你執(zhí)行了一個(gè)單獨(dú)的SQL語句來取得結(jié)果清單(就是+1)。?
? 對回傳的每筆記錄,你執(zhí)行了一個(gè)查詢語句來為每個(gè)載入細(xì)節(jié)(就是N)。?
這個(gè)問題會(huì)導(dǎo)致數(shù)百上千的SQL語句被執(zhí)行。這通常不是期望的。
而在Mybatis中,除了相容ibatis2.x中的「巢狀查詢」方式外,還提供了直接「嵌套結(jié)果」的方式,其效果相當(dāng)於直接透過一句sql將查詢出的dto物件自動(dòng)封裝成所需的對象。?
具體實(shí)現(xiàn)方法請自行參考Mybatis官方使用手冊,不在此累述.
不過實(shí)際上這項(xiàng)改進(jìn)所帶來的好處也是很有限的。因?yàn)檫@一方式在使用分頁的時(shí)候並不起作用,或者說嵌套物件的結(jié)果集是不允許進(jìn)行分頁的。這一點(diǎn)在Mybatis框架中已經(jīng)做出了明確的限制(org.apache.ibatis.executor.resultset.NestedResultSetHandler裡34行),而實(shí)際項(xiàng)目中需要分頁的情況又特別多…?
仔細(xì)一想,一對多映射確實(shí)不能透過設(shè)定檔來分頁,因?yàn)檫@時(shí)查詢出的記錄數(shù)並不等於實(shí)際回傳物件的size,不過一對一映射為什麼也不允許就不太明白了??赡苁且?yàn)橐粚σ皇且粚Χ嗟奶乩?,而在設(shè)計(jì)框架的時(shí)候並沒有考慮去處理或是難於處理這一特例吧。
3、MyBatis採用強(qiáng)大的基於OGNL的表達(dá)式來消除其他元素?
熟悉struts2的人應(yīng)該對OGNL表達(dá)式不會(huì)感到陌生,?
MyBatis採用OGNL表達(dá)式簡化了配置文件的複雜性,使用起來更陌生簡潔。
可能較關(guān)心的是?
Mybatis實(shí)現(xiàn)了介面綁定,使用更加方便。?
iBatis / MyBatis 3提供了一個(gè)新的功能:註解。
更多Mybatis與Ibatis的區(qū)別相關(guān)文章請關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
