该栏目会系统的介绍 MyBatis Plus 的知识体系,共分为简介、常用API、SQL注入器、代码生成器等模块
文章目录
- SQL 注入原理
- 自定义 SQL 注入
SQL 注入原理
-
AbstractSqlInjector
中,主要由inspectInject()方法
进行注入,该方法获取所有AbstractMethod
(相关子类用于 sql 注入,如SelectById
子类) - 遍历
AbstractMethod
,并调用其inject()方法
,最后调用其抽象injectMappedStatement()方法
- 由
AbstractMethod相关子类
的injectMappedStatement()方法
进行sql注入
自定义 SQL 注入
AbstractMethod 子类
public class FullAll extends AbstractMethod {
@Override
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass,
TableInfo tableInfo) {
String sqlMethod = "findAll";
String sql = "select * from " + tableInfo.getTableName();
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return this.addSelectMappedStatement(mapperClass, sqlMethod, sqlSource, modelClass, tableInfo);
}
}
SQL 注入
public class SqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList() {
List<AbstractMethod> methods = super.getMethodList();
methods.add(new FullAll());
return methods;
}
}
对象配置
@Configuration
public class BatisConfig {
@Bean
public SqlInjector sqlInjector() {
return new SqlInjector();
}
}
继承 BaseMapper 进行扩展,添加扩展的方法
public interface BaseMapperPlus<T> extends BaseMapper<T> {
List<T> findAll();
}
继承 BaseMapperPlus
public interface UserMapper extends BaseMapperPlus<User> {
}