背景
执行mybatis mapper中的一个方法时报错:
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.xxx.mapper.SysDictionaryMapper.findByTypeCode
    org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:672)
    org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:507)
    org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:500)
    org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:240)
分析
查看SysDictionaryMapper.findByTypeCode是否存在:
    SysDictionaryMapper.java
        List<SysDictionaryDO> findByTypeCode(@Param("typeCode") String typeCode);
    SysDictionaryMapper.xml
        <select id="findByTypeCode" resultMap="BaseResultMap">
            SELECT <include refid="baseColumn"/>
            FROM <include refid="tableName"/>
            WHERE type_code = #{typeCode} and del_status = 0
            ORDER BY sort
        </select>
查看配置:
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" />
        <property name="plugins">
            <array>
                <bean class="com.xxx.interceptor.MapInterceptor"/>
                <bean class="com.xxx.interceptor.ParamterInterceptor"/>
            </array>
        </property>
    </bean>
 通过分析发现,SysDictionaryMapper.xml并不是在mapper目录下,而是在其子目录下,所以导致找不到该mapper文件;
 通过分析发现,SysDictionaryMapper.xml并不是在mapper目录下,而是在其子目录下,所以导致找不到该mapper文件;
解决方案
修改配置
<property name="mapperLocations" value="classpath:mapper/**/*Mapper.xml" />
mapper/**/*Mapper.xml表示包含目录及其子目录下的所有mapper文件
 
  
  
  
 
 
  
 
 
 