spring-boot - 为什么 Mybatis 对所有请求都添加检查请求?
问题描述
我将 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));
}
}
我怎样才能避免这个无用的电话?提前致谢
解决方案
我通过将 @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,不再有额外的要求
推荐阅读
- python - 如何在线程 Python 中设置断点?
- javascript - 通过 chrome 扩展使用 JavaScript 的 Ajax - 错误阻止了 MIME 类型 application/json 的跨域响应
- java - 如何使用导航图形工具在 Android Studio 中打开下一个页面上的“按钮单击操作”?
- node.js - 如何将令牌从角度服务文件中的本地存储添加到标头中
- reactjs - 如何使反应选择作为文本区域
- r - 如何在 MESS 包中为 auc() 函数设置细分以防止收到错误消息?
- c++ - 整数或双 1.0 和 1
- julia - Julia:searchsorted 的矢量化版本
- php - 如何遍历多维数组并比较值?
- c# - 如何模拟 IUrlHelper