前言
项目中用到了MySQL和ClickHouse两种数据源,在项目中进行了多数据源配置。但是发现在查询数据的时候数据库中下划线命名的字段无法自动映射到Java实体类对应的字段中。
解决方案
我们下划线映射成驼峰的配置为mybatis.configuration.map-underscore-to-camel-case: true。
我们需要在MySQLDataSource配置类中多写一些配置:
@Configuration
@MapperScan(basePackages = "it.aspirin.riderserver.mapper.mysql", sqlSessionTemplateRef = "mySqlSessionTemplate")
public class MySQLDataSourceConfig {
/**
* 配置多数据源导致下划线命名映射为驼峰失效,需要在这里加一个配置,并在下面SqlSessionFactory方法中引入
*
* @return 配置
*/
@Bean
@ConfigurationProperties(prefix = "mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
/**
* 自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常
*/
@Bean(name = "mysqlDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "mySqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//这里将下划线映射为驼峰的配置引入
bean.setConfiguration(globalConfiguration());
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql/*.xml"));
return bean.getObject();
}
/**
* 创建事务
*
* @param dataSource
* @return
*/
@Bean(name = "mysqlTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 用于注入dao
*
* @param sqlSessionFactory
* @return
* @throws Exception
*/
@Bean(name = "mySqlSessionTemplate")
@Primary
public SqlSessionTemplate SqlSessionTemplate(@Qualifier("mySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "mysqlDataSource")
public JdbcTemplate mysqlJdbcTemplate(@Qualifier(value = "mysqlDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
如上面配置文件,首先写globalConfiguration()方法,该方法特别注意@ConfigurationProperties(prefix = "mybatis.configuration")注解。表示将mybatis.configuration开头的配置信息映射到配置类中。
在sqlSessionFactory()方法中中将上述配置设置进去,下划线自动映射驼峰的配置就可以生效了。