关于Result Maps collection does not contain value for....错误原因总结

今天,进行Mybatis的动态查询测试的时候出现了

Result Maps collection does not contain value for 。。。。。错误

查看了网上的资料,讲解的很细致说的有可能是namespace配置错误。

<mapper namespace="com.demo.mybatis.testMapper">

看了一下不是,又看了下第二种方法说的是

出现这个错误 主要是因为你的select标签内部的resultMap属性 指向的不正确

果然就是这个错误 因为我没有配置resultMap所以导致了找不到。

// 看下 引用的 resultMap 是否正确
<select id="selectByParam" resultMap="BaseResultMap">
        SELECT
        *
        FROM test
        WHERE id = #{id}
 </select>


在使用 MyBatis 时,如果遇到错误信息 `java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.String`,这通常与映射配置或返回值类型设置不当有关。以下是可能的原因及解决方案: ### 原因分析 1. **resultMap 引用无效或未定义** 错误信息表明 MyBatis 尝试从 `resultMaps` 集合中查找一个不存在的 `ResultMap`,而该集合并未包含指定的键(如 `java.lang.String`)。这通常发生在 XML 映射文件中引用了不存在的 `resultMap` 属性 [^4]。 2. **混淆 `resultMap` 和 `resultType` 的使用** 当查询结果为简单数据类型(如 `String`、`Integer`)或非复杂对象时,应使用 `resultType` 而不是 `resultMap`。若仍然使用 `resultMap` 并指向了一个不适用的类名(例如 `java.lang.String`),则会触发此异常 [^4]。 3. **MyBatis 版本兼容性问题** 某些情况下,MyBatis 或 MyBatis-Plus 的版本升级可能导致内部类结构变化,从而影响 `resultMaps` 的存储和检索逻辑。例如,在 MyBatis Plus 3.4.3.1 中,出现过 `MybatisConfiguration$StrictMap$Ambiguity` 无法转换为 `ResultMap` 的异常 [^2]。 ### 解决方案 1. **检查 XML 映射文件中的 `resultMap` 定义** 确保所有引用的 `resultMap` 实际存在,并且其 `id` 与调用处一致。如果不需要自定义映射,则建议改用 `resultType`。 2. **将 `resultMap` 替换为 `resultType`** 如果 SQL 查询返回的是基础类型或单个字段,而非实体类对象,应该使用 `resultType` 来指定返回类型。例如: ```xml <select id="selPermissionsByUser" parameterType="user" resultType="java.lang.String"> select rp.permission_id from user_role ur, role_permission rp, user where ur.role_id = rp.role_id and user.id = ur.user_id and user.name = #{name}; </select> ``` 3. **避免 `resultMap` 指向无效类型** 不要将 `resultMap` 设置为 `java.lang.String` 这样的基础类型,因为它们无法作为有效的 `ResultMap` 使用。仅当需要自定义复杂对象映射时才使用 `resultMap` [^4]。 4. **排查版本兼容性问题** 如果使用的是较新的 MyBatis 或 MyBatis-Plus 版本,并且遇到类似 `MybatisConfiguration$StrictMap$Ambiguity cannot be cast to ResultMap` 的异常,建议查阅官方文档或更新日志,确认是否存在已知的兼容性问题,并考虑回退到稳定版本或应用相应的修复补丁 [^2]。 5. **清理缓存并重新构建项目** 在某些开发环境中,旧的编译文件可能会导致意外行为。尝试清理项目缓存并重新构建,确保所有配置文件和类文件都是最新的。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值