天天看点

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注入的原理