Springboot配置多数据源导致[下划线自动映射驼峰]配置失效问题解决

前言

项目中用到了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()方法中中将上述配置设置进去,下划线自动映射驼峰的配置就可以生效了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于多数据源配置驼峰映射不生效的问题,可能有以下几个原因和解决方案: 1. MyBatis 配置文件设置问题:请确保每个数据源的 MyBatis 配置文件中,已经正确开启了驼峰命名规则的映射。在配置文件的 `<settings>` 标签中添加如下设置即可: ```xml <setting name="mapUnderscoreToCamelCase" value="true" /> ``` 这样就可以将数据库的下划线命名转换为驼峰命名。 2. 实体类字段和数据库字段不匹配:请检查实体类中的属性名和数据库表的字段名是否一致,包括大小写。如果不一致,可以使用 `@Column` 注解或者在配置文件中进行手动映射,确保二者对应。 3. MyBatis 的 resultMap 配置问题:如果使用 resultMap 进行字段映射,需要确保 resultMap 中的字段名与数据库表中的字段名一致。可以使用 `<resultMap>` 标签进行配置,并在 `<result>` 标签中使用 column 属性指定数据库字段名。 4. 数据库连接驱动问题:有些数据库连接驱动默认是不支持驼峰命名转换的,您可以尝试更换合适的数据库连接驱动,例如使用 druid 连接池等。 5. 缓存问题:如果您启用了缓存机制,可能会导致数据不及时更新。可以尝试关闭缓存,或者在更新操作后手动清除缓存。 请根据具体情况逐一排查上述原因,并进行相应的解决方案尝试,希望能帮到您!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值