之前在百度上查找相关的问题,给出解决问题的答案大同小异,有如下几点:
1:检查xml文件所在的package名称是否和interface对应的package名称一一对应
2:检查xml文件的namespace是否和xml文件的package名称一一对应
3:检查函数名称能否对应上
4:去掉xml文件中的中文注释
5:随意在xml文件中加一个空格或者空行然后保存
我自己照着如上方法,反复检查,确实没有错,后来一想,我配置的是两个数据源,或许问题就出在了数据源上。果然,嘻嘻
- SpringBoot中第一个数据源的配置类:
@Configuration
@MapperScan(basePackages = "app.aido.dao.sonar", sqlSessionTemplateRef = "sqlSessionTemplate")
public class MybatisDatasourceConfig {
private String typeAliasPackage = "app.aido.model";
String configLocation = "classpath:mybatis-config.xml";
@Autowired
@Qualifier("systemDataSource")
private DataSource ds;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(ds);
//指定mapper xml目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/sonar/*.xml"));
factoryBean.setTypeAliasesPackage(typeAliasPackage);
factoryBean.setConfigLocation(resolver.getResource(configLocation));
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory()); // 使用上面配置的Factory
return template;
}
}
- 第二个数据源的配置类:
@Configuration
@MapperScan(basePackages = "app.aido.dao.emp", sqlSessionTemplateRef = "sqlSessionTemplate")
public class MybatisDatasource2Config {
@Autowired
@Qualifier("businessDataSource")
private DataSource ds;
String configLocation = "classpath:mybatis-config.xml";
private String typeAliasPackage = "app.aido.model";
@Bean
public SqlSessionFactory sqlSessionFactory2() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(ds);
//指定mapper xml目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/emp/*.xml"));
factoryBean.setTypeAliasesPackage(typeAliasPackage);
factoryBean.setConfigLocation(resolver.getResource(configLocation));
//factoryBean.setTypeAliasesPackage(typeAliasPackage);
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate2() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory2()); // 使用上面配置的Factory
return template;
}
}
由于粗心大意,@MapperScan(basePackages = “app.aido.dao.emp”, sqlSessionTemplateRef = “sqlSessionTemplate”)中,加粗的部分,两个配置类我写的一样了,第二个配置类应该是sqlSessionTemplate2. 改了这个之后,问题就解决了。这个小问题,让我瞎忙了很久!!!