SSM项目使用junit单元测试时Mybaties通配符加载Mapper不能正常加载


个人博客 地址:http://www.wenhaofan.com/article/20181108104133

问题描述

    项目使用maven build 以及tomcat run能够正常运行,但是使用junit单元测试时却报如下错误

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for CommonTermTeacherMapper.listOwnTerm

   猜测是mybaties mapper未能正常加载,本项目的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即可正常加载运行,需要注意的是在线上环境的时候尽量将*去掉,提高检索效率

具体细节目前不再深究 项目进度重要,日后有空再来研究

原文地址:https://www.cnblogs.com/fanwenhao/p/10020252.html