多数据源,提示无效的绑定语句(Invalid bound statement (not found))

最近整了一项目Springboot+mybatis,项目刚搭建使用单数据源,码完代码提交仓库后大佬直接加了多数据源,也没测试。结果同事在测试阶段直接报错…

错误信息

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx.xxx.xxx.maper.selectById

问题果断抛给我,怎么办解决呗。
第一感觉就是配置多数据源的时候出了问题,因为在单数据源情况下功能是没问题的,试了几种方法没解决。emmm,只能从基础排查

网上百度排查5步走

1:XML文件package和Mapper/Dao的package是否能对应
2:XML的namespace是否能找到对应Mapper/Dao
3:Mapper/Dao函数和XML中是否能对应
4:XML中文注释去掉
5:XML中加空格或空行

然而并没有解决,说明问题还是出在配置多数据源

@Configuration  // 注解到spring容器中
@MapperScan(basePackages = "xxx.xxx.xxx.dao", sqlSessionFactoryRef = "oneSqlSessionFactory")
public class DataSourceAppConfig {

    @Bean(name = "oneDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.app")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("oneDataSource") DataSource ds) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(ds);
        // 扫描mybatis文件
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mappers/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "oneSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sessionFactory) throws Exception {
        return new SqlSessionTemplate(sessionFactory);
    }

    @Bean(name = "oneTransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("oneDataSource") DataSource ds) {
        return new DataSourceTransactionManager(ds);
    }
}

就是在获取SqlSessionFactory的时候没有加setMapperLocations, 好像是自动扫描大mybatis文件存储,需要指定下。
另外需要注意的是多数据源情况下,每个数据源的mapper文件和XML文件要放在不同的package下。

你可能感兴趣的:(java问题整理)