【发布时间】:2020-02-23 15:37:40
【问题描述】:
我将 Mybatis 与 spring boot '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));
}
}
我怎样才能避免这个无用的电话?提前致谢
【问题讨论】:
-
mybatis 本身不会做任何额外的查询。如果您使用任何配置,请向您展示 mybatis 配置,更重要的是向我们展示您的
DataSource配置。 -
@RomanKonoval 我更新了我的问题,我添加了 DataSource 和我的 application.properties
-
您是否检查过使用普通 JDBC 执行查询时是否得到相同的查询重复?如果是这种情况,那么 JDBC 驱动程序会在内部执行此操作。
-
据我了解,MyBatis 不会自动执行第一个查询,例如“SELECT * FROM (myRequest) T LIMIT 0”。使用纯 JDBC 时会发生这种情况吗?如果发生,这个问题不属于 MyBatis。
-
当我使用纯 JDBC 时,我没有额外的请求,你知道吗?
标签: spring-boot mybatis amazon-athena hikaricp spring-mybatis