SpringBoot整合MybatisPlus3.X之SQL注入器(九)

  • pom.xml

     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.2.0</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
            <dependency>
                <groupId>p6spy</groupId>
                <artifactId>p6spy</artifactId>
                <version>3.8.0</version>
            </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency><dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.49</version>
                <scope>test</scope>
            </dependency>
            <!-- for testing -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
  • application.yml

    spring:
      datasource:
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
        url: jdbc:p6spy:h2:tcp://192.168.180.115:19200/~/mem/test
        username: root
        password: test
  • 实体类

    @Data
    @TableName(value = "student")
    public class Student {
    ​
        private Long id;
    ​
        private String name;
    ​
        private Integer age;
    ​
    }
    ​
    @Mapper
    public interface StudentMapper extends BaseMapper<Student> {
    ​
        void deleteAll();
    ​
    }
  • 注入器及方法

    public class DeleteAll extends AbstractMethod {
    ​
        @Override
        public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
            /* 执行 SQL ,动态 SQL 参考类 SqlMethod */
            String sql = "delete from " + tableInfo.getTableName();
            /* mapper 接口方法名一致 */
            String method = "deleteAll";
            SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
            return this.addDeleteMappedStatement(mapperClass, method, sqlSource);
        }
    }
    ​
    @Component
    public class MySqlInjector extends DefaultSqlInjector {
    ​
        @Override
        public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
            List<AbstractMethod> methodList = super.getMethodList(mapperClass);
            //增加自定义方法
            methodList.add(new DeleteAll());
            return methodList;
        }
    }
  • 测试类

    @SpringBootTest
    class InjectorApplicationTests {
    ​
        @Autowired(required = false)
        private StudentMapper studentMapper;
    ​
        @Test
        public void test(){
            studentMapper.deleteAll();
        }
    ​
    }
  • 测试结果

    2019-10-31 10:40:22.780  INFO 9484 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
     Consume Time:0 ms 2019-10-31 10:40:22
     Execute SQL:delete from student

 

原文地址:https://www.cnblogs.com/dalianpai/p/11770000.html