spring加載資源文件中classpath*與classpath的區別


spring和MyBatis繼承的時候,配置mapperLocations.一開始配置是這樣的.

需要加載路徑為com/thomas/base/mapper和com/thomas/bu/mapper/business下的所有mapper文件

 
         
1 <!-- 配置mybatis的sqlSessionFactory -->
2     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
3         <property name="dataSource" ref="dataSource" />
4         <!-- 自動掃描mappers.xml -->
5         <property name="mapperLocations" value="classpath:com/thomas/*/mappers/*Mapper.xml" ></property>
6         <!-- mybatis配置文件 -->
7         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
8     </bean>
 
         

 

 

結果一直報com/thomas/base/mappers下的mapper文件的某個方法找不到.

 

錯誤:Invalid bound statement (not found)

修改成這樣就可以找到了.

1 <!-- 配置mybatis的sqlSessionFactory -->
2     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
3         <property name="dataSource" ref="dataSource" />
4         <!-- 自動掃描mappers.xml -->
5         <property name="mapperLocations" value="classpath*:com/thomas/*/mappers/*Mapper.xml" ></property>
6         <!-- mybatis配置文件 -->
7         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
8     </bean>
9     

原因是classpath:和classpath*:在spring加載資源的時候是不同的.

 

classpath:只能加載找到的第一個資源文件.(上面只匹配了com/thomas/bu/mappers/business下的mapper文件,而com/thomas/base/mappers就被忽略了)

classpath*:能加載多個路徑下的資源文件.(com/thomas/bu/mappers/business和com/thomas/base/mappers都被加載進來了.)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM