错误: Mapped Statements collection does not contain value for XXX.

还是在项目中, 跳出以上提示, 注意以上提示的细节”Mapped“一词, 它是被动语态的, 是”在已经匹配(Mapped)的语句(Statements)中”的意思, 说明JVM已经找到了一些Mapper的xml文件, 但”does not contain value for XXX”, 也就是JVM找到的xml文件中没有你想要使用的’XXX’这款. 那么, 怎么解决这个问题?!

网上的资料, 大致分类如下:

1.命名空间配置错误: <mapper namespace="com.sitech.mapper.StudentMapper">, 要写全到"StudentMapper"为止[ref];

2.如果使用Maven管理项目, 则可能是Mapper的xml文件没有编译到target中(pom.xml的build配置项)[ref];

3.还有, 配置中没有引入Mapper的xml文件[ref];

第3点的情况和我的情况类似, 我的是'引入出错'(我要引入的文件夹是'mapperXml', 却没有修改COPY过来的配置代码, 死活没有去检查这段代码), 错误代码如下(在'spring-mybatis.xml'中):

<!-- 引入myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
    <!-- 上一行末尾: 'mapper'要改成'mapperXml' -->
</bean>

<!-- 10月30日, 又新增一个错误导致相同的报错, 见下: -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.datareport.modules.NewUser.dao.NewUserDao">
    <!-- 错误原因: 大小写没弄对(namespace中的'NewUser'应为小写开头, 因为包文件名是'newUser')  -->
    <select ...>
        ...
    </select>
</mapper>

错误能够修改掉, 但根本上, 如果不了解整个WEB项目框架的机制, 也只能是修修补补, 东边的砖搬到西边去, 造不了大厦, 所以, 多看官方资料和源码, 以及实践学习中的(即撸码上项目Just_For_Fun), 所以, 少年, 加油吧.

    原文作者:tjipot
    原文地址: https://segmentfault.com/a/1190000011705016
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞