通常一個mapper.XML對應一個DAO接口,DAO是否可以重載?

2020-09-08 16:36 更新

答:不能重載,方法名對應的 mapper.xml 文件里的一個 id,這個與方法名對應,系統(tǒng)會根據(jù) namespace+id 找到對應的方法對應。


Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法內(nèi)的參數(shù),就是傳遞給 sql 的參數(shù)。Mapper 接口是沒有實現(xiàn)類的,當調(diào)用接口方法時,接口全限名+方法名拼接字符串作為 key 值,可唯一定位一個 MapperStatement。在 Mybatis 中,每一個、、、標簽,都會被解析為一個MapperStatement 對象。


舉例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到 namespace 為 com.mybatis3.mappers.StudentDao 下面 id 為findStudentById 的 MapperStatement。


Mapper 接口里的方法,是不能重載的,因為是使用 全限名+方法名 的保存和尋找策略。Mapper 接口的工作原理是 JDK 動態(tài)代理,Mybatis 運行時會使用 JDK動態(tài)代理為 Mapper 接口生成代理對象 proxy,代理對象會攔截接口方法,轉(zhuǎn)而執(zhí)行 MapperStatement 所代表的 sql,然后將 sql 執(zhí)行結果返回。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號