почему Mybatis добавляет запрос проверки для всех запросов? - PullRequest
0 голосов
/ 28 октября 2019

Я использую Mybatis с пружинной загрузкой 'mybatis-spring-boot-starter version 2.1.0' и Athena. Когда я проверяю журналы своей базы данных, для каждого запроса, вызываемого Mybatis, есть два запроса:

. Первый: SELECT * FROM (myRequest) T LIMIT 0

И второй:myRequest

Например, если он создает запрос для проверки доступности базы данных для каждого запроса, любая идея?

, вот мой картограф:

@Mapper
public interface MyMapper {

    @Select(value = "select name, adress from db.table limit 10")
    List<Object> findAll();
}

и моя конфигурация базы данных


@Configuration
@Slf4j
public class AthenaConfig {

    @Bean(name = "athena-db")
    @ConfigurationProperties(prefix = "athena.spring.datasource.hikari")
    public DataSource athenaDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(@Qualifier("athena-db") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("athena.mapper");
        sqlSessionFactoryBean.getObject().getConfiguration().setDefaultFetchSize(500);
        sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() throws Exception {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("athena.mapper");
        return mapperScannerConfigurer;
    }
}

Вот мой файл application.properties:

athena.spring.datasource.driver-class-name=com.simba.athena.jdbc.Driver
athena.spring.datasource.url=jdbc:awsathena://AwsRegion=eu-west-1;AwsCredentialsProviderClass=com.amazonaws.auth.DefaultAWSCredentialsProviderChain;S3OutputLocation=s3://xxxx/;

, когда я использую шаблон JDBC, у меня нет дополнительных запросов, вот мой тест с JDBCTemplate:

@Repository
public class MyRepository {
    @Autowired
    JdbcTemplate jdbcTemplate;


    List<Object> findAll(){
     return jdbcTemplate.query("select name, adress from db.table limit 10",new BeanPropertyRowMapper(Object.class));
    }
}

Как мне избежать этого бесполезного звонка? заранее спасибо

1 Ответ

0 голосов
/ 05 ноября 2019

Я получил его путем добавления @Options (StatementType = StatementType.STATEMENT) в мой маппер:

@Mapper
public interface MyMapper {

    @Select(value = "select name, adress from db.table limit 10")
    @Options(statementType = StatementType.STATEMENT)
    List<Object> findAll();
}

больше нет дополнительных запросов благодаря @ ave

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...