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

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

  • 相关阅读:
    数组与字符串的相互转换
    数组新增,修改json数据
    百度Ueditor设置图片自动压缩
    微信小程序——自定义图标组件
    微信小程序——自定义导航栏
    微信小程序——网盘图片预览
    微信小程序——星星评分
    微信小程序——页面中调用组件方法
    Vue路由获取路由参数
    C#随机颜色和随机字母
  • 原文地址:https://www.cnblogs.com/fanwenhao/p/10020252.html
Copyright © 2020-2023  润新知