在写动态切换数据源的demo时,遇到了这个问题;dao层找不到xml中的方法,各种检查都没有问题;
最后发现问题出在xml所在位置,为了方便之前把xml跟dao接口放在同一路径下,只需要跟dao同名,使用注解扫描即可.
解决办法是将xml放到resources下,然后指定位置即可解决:
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dy());
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/UserMapper.xml"));
return sqlSessionFactoryBean.getObject();
}
如果放在java文件夹下,那么需要在maven中添加静态文件路径扫描,否则编译会找不到xml;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dy());
sqlSessionFactoryBean.
setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath*:com/dynamic/dao/*.xml"));
return sqlSessionFactoryBean.getObject();
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>