问题描述:项目使用maven build 以及tomcat run能够正常运行,但是使用junit单元测试时却报错误
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for CommonTermTeacherMapper.listOwnTerm
猜测是mybaties mapper未能正常加载
<!-- 本项目数据源代码 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 显式指定Mapper文件位置 -->
<property name="configLocation"
value="classpath:/SqlMapConfig.xml" />
<!-- 通配符指定Mapper.xml -->
<property name="mapperLocations">
<array>
<value>classpath:/mybatis/**/*Mapper.xml</value>
<value>classpath:/**/*Mapper.xml</value>
</array>
</property>
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
</bean>
解决方案 :可能是junit的运行时的classpath信息与正常运行时不同,于是将classpath修改为classpth*
,使其从多个classpath中加载mapper文件
<!-- 本项目数据源代码 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 显式指定Mapper文件位置 -->
<property name="configLocation"
value="classpath*:/SqlMapConfig.xml" />
<!-- 通配符指定Mapper.xml -->
<property name="mapperLocations">
<array>
<value>classpath*:/mybatis/**/*Mapper.xml</value>
<value>classpath*:/**/*Mapper.xml</value>
</array>
</property>
</bean>
junit正常加载运行,需要注意的是在线上环境的时候尽量将*
去掉,提高检索效率