• 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

     

  • 相关阅读:
    【python】requests库
    pycharm新建项目时选择virtualenv的说明
    cookie、session、token
    读写锁--DEMO
    锁降级--防止线程安全问题
    mysql-left join
    index-document-shard
    ES-常见搜索方式
    SpringBoot在自定义类中调用service层等Spring其他层
    mongodb crud
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11770000.html
Copyright © 2020-2023  润新知