天天看點

MP(Mybatis-Plus)之SQL注入的原理

在MP中,ISqlInjector負責SQL的注入工作,它是一個接口,AbstractSqlInjector是它的實作類,實作關系如下:

MP(Mybatis-Plus)之SQL注入的原理

 在AbstractSqlInjector中,主要是由inspectInject()方法進行注入的,如下:

MP(Mybatis-Plus)之SQL注入的原理

 在實作方法中,methodList.forEach(m -> m.inject(builderAssistant, mapperClass, modelClass,

tableInfo)); 是關鍵,循環周遊方法,進行注入。

最終調用抽象方法injectMappedStatement進行真正的注入:

MP(Mybatis-Plus)之SQL注入的原理

 檢視該方法的實作:

MP(Mybatis-Plus)之SQL注入的原理

以SelectById為例檢視:

MP(Mybatis-Plus)之SQL注入的原理

 可以看到,生成了SqlSource對象,再将SQL通過addSelectMappedStatement方法添加到meppedStatements中。

MP(Mybatis-Plus)之SQL注入的原理