关于MybatisPlus自定义SQL注入器的使用
1 自定义SQL注入器
1.1 介绍
- 在Mybatis的时候,通过xml来进行配置的SQL语句
- 在MybatisPlus,通过拓展SQL注入器,来自定义SQL,在加载mybatis环境时就注入
- 根据MybatisPlus的AutoSqlInjector可以自定义各种你想要的sql,注入到全局中,相当于自定义MybatisPlus自动注入的方法
- MybatisPlus3.摒弃AutoSqlInjector
1.2 SQL注入使用
- 基于MybatisPlus3.x实现
- (1)在Mapper接口中自定义一个方法
1
2
3
4
5
public interface UserMapper extends BaseMapper<User> {
//自定义 删除全部 方法
public void deleteAll();
}
- (2)创建方法类,继承与AbstractMehtod
1
2
3
4
5
6
7
8
9
10
11
12//类名与自定义方法一致
public class DeleteAll extends AbstractMethod {
public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
String sql = "delete from " + tableInfo.getTableName();
String method = "deleteAll";
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return this.addDeleteMappedStatement(mapperClass, method, sqlSource); //添加对应的MappedStatement
}
}
- (3)创建注入器类,继承于DefaultSqlInjector,将方法类添加到注入器中
1
2
3
4
5
6
7
8
9
10
11
12
public class MySQLInjector extends DefaultSqlInjector {
public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass);//调用父类的getMethodList获取methodList
methodList.add(new DeleteAll());//将自定义的方法传入
return methodList;
}
}
- (4)测试
1
2
3
4
5
6
7
8
9
10
11
12
public class SpringMPTest {
private UserMapper userMapper;
public void injectorTest() {
userMapper.deleteAll();
}
}