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; }