0%

【MybatisPlus】自定义SQL注入器

关于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
    @Mapper
    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 {

    @Override
    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
    @Component
    public class MySQLInjector extends DefaultSqlInjector {

    @Override
    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
    @SpringBootTest
    public class SpringMPTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void injectorTest() {
    userMapper.deleteAll();
    }

    }