在MP中,ISqlInjector負責SQL的注入工作,它是一個接口,AbstractSqlInjector是它的實作類,實作關系如下:
在AbstractSqlInjector中,主要是由inspectInject()方法進行注入的,如下:
在實作方法中,methodList.forEach(m -> m.inject(builderAssistant, mapperClass, modelClass,
tableInfo)); 是關鍵,循環周遊方法,進行注入。
最終調用抽象方法injectMappedStatement進行真正的注入:
檢視該方法的實作:
以SelectById為例檢視:
可以看到,生成了SqlSource對象,再将SQL通過addSelectMappedStatement方法添加到meppedStatements中。