1、jdbcTemplate
使用 jdbcTemplate 構造SQL語句。其中 "?"不可以作爲表名的佔位符。
解決方法:動態生成SQL Map;根據參數找到對應預先生成表名的SQL語句。
public static Map<String, String> getSqlSentence() { Map<String, String> sqlMap = new HashMap<>(); String tableFirstName = "tab_sj_pkg_"; for (int i = 1; i < 100; i++) { String j = String.format("%02d", i); String tableName = tableFirstName + j; String sql = "SELECT * FROM " + tableName + " WHERE UTCTime > ? AND UTCTime < ?"; sqlMap.put(j, sql); } return sqlMap; }
2、idea 導入的 mybatis 包不存在:
不僅僅是mybatis,其他包也存在導入後找不到的問題。可能的原因有:包之間的版本依賴問題、idea內置的maven版本兼容、本地倉庫緩存問題、個人感覺,網絡導致maven下載的包不完整的可能性更大。
嘗試過的方案有:更新pom文件、清除idea緩存(File->invalidate caches)、委託IDE構建(File->Settings->Build->Build tools->Runner->Delegate IDE build),這種方式確實有用,但每次啓動需要重新下載,非常緩慢。
最終使用, 在控制檯輸入: mvn idea:idea, 再清除idea緩存,解決包導入報錯問題。
3、mybatis 與 jdbcTemplate 同時存在問題
mybatis 與 jdbcTemplate 在spring容器中可以同時存在。使用相同的 DataSource 連接池,並共用spring 提供的事務管理器。
@Bean @Qualifier("operation") @ConfigurationProperties(prefix = "spring.datasource.operation") public DataSource createDataSource() { return new HikariDataSource(); } @Bean @Primary @Qualifier("operationJdbcTemplate") @Order(10) public JdbcTemplate createJdbcTemplate(@Autowired @Qualifier("operation") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean @Primary @Qualifier("operationTransactionManager") PlatformTransactionManager createTxManager(@Autowired @Qualifier("operation") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /* mybatis */ @Bean SqlSessionFactoryBean createSqlSessionFactoryBean(@Autowired @Qualifier("operation") DataSource dataSource) { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); return sqlSessionFactoryBean; }