欢迎光临小站,愿能为您提供帮助与启发,热爱分享、享受分享、乐于分享,让我们携手共同进步。
之前由于给springboot项目实现了读写分离的方案,结果发现调用dao层始终提示如下问题:
invalid bound statement (not found)
因为这个问题寻找了半天解决方案,网上的文章无非集中在namespace、mapper文件路径、启动扫描包、文件名不一致等等,但是无一例外,都没能解决我的问题
解决方法(Solve Problem):
在要实现SqlSessionFactory的地方,加入:
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*Mapper.xml"));
如:
@Bean
public SqlSessionFactory getSqlSessionFactory(@Qualifier("dataSource") DynamicDataSource dataSource) {
try {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
// 如果不写这里,会导致 mybatis 出现 invalid bound statement (not found) 的问题
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*Mapper.xml"));
bean.setDataSource(dataSource);
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
请问bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources(“classpath:mapper/**/*Mapper.xml”)); 中classpath:mapper/**/*Mapper.xml” 与 classpath:mapper/”name”/*Mapper.xml” 的区别,使用前者,其他的数据源工厂需要再set吗?前者与后者的区别在哪?
这两者的区别就是Mapper文件夹下面是否有多级目录,采用前者这种方式,如果底下比如有多个层级的目录,也是会将里面的mapper扫描到的,如果多数据源是同类型的库,比如都是oracle或者mysql,则只用一个就行,如果是多个不同类型的数据源,则建议分开,否则可能会语句不同导致报错
感谢大佬,我还是同样的问题,配置多数据源后,无法识别xml