由于最近項(xiàng)目中打算嘗試使用mybatis-plus(此前一直在用mybatis),于是就去學(xué)習(xí)了一下洪燥,在瀏覽官方文檔時(shí)產(chǎn)生了本文標(biāo)題所示的疑問磕秤。
問題產(chǎn)生后,首先自然是尋求官方的解釋捧韵,但是結(jié)果如下:
1市咆、官方指南中“FAQ-常見問題”章節(jié)并沒有對(duì)此作出解釋;
2再来、官方指南中“核心功能-CRUD接口”章節(jié)有如下兩段描述蒙兰,從字面意思理解,IService接口只是對(duì)BaseMapper的進(jìn)一步封裝芒篷,查看兩者的api源碼后發(fā)現(xiàn)搜变,貌似主要是封裝了批量操作;
在這里插入圖片描述
image.png
綜合來看针炉,比較合理的解釋是:
1挠他、從分層角度來解釋,BaseMapper是DAO層的CRUD封裝篡帕,而IService是業(yè)務(wù)業(yè)務(wù)邏輯層的CRUD封裝殖侵,所以多了批量增、刪镰烧、改的操作封裝拢军,這也比較符合官方指南中的闡述;
2怔鳖、IService是對(duì)BaseMapper的擴(kuò)展茉唉,從BaseMapper、IService败砂、ServiceImpl三者的類關(guān)系以及源碼可以看出赌渣;
此外,個(gè)人認(rèn)為應(yīng)該還有一個(gè)原因昌犹,就是IService和BaseMapper提供的是兩種實(shí)現(xiàn)方式:
如果繼承BaseMapper坚芜,則不需要去實(shí)現(xiàn)其內(nèi)部方法,依靠mybatis的動(dòng)態(tài)代理即可實(shí)現(xiàn)CRUD操作斜姥;
而如果自定義IBaseService去繼承IService鸿竖,則需要去實(shí)現(xiàn)IService中的方法沧竟;