报Result Maps collection does not contain value for java.lang.Long错误解决方法

这个地方是个坑。可能原因有两个:

1.自己调用的mapper中resultType误配成resultMap所导致。

2.在调用方法时,报这个错误,不一定是自己所调用的方法相关的配置错误,其他的mapper中配置错误也会导致。因为在调用方法时,会检测所有mapper中的返回值,这时候查看一下别的mapper中配置就好了。(坑了我好久)

在使用 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. **清理缓存并重新构建项目** 在某些开发环境中,旧的编译文件可能会导致意外行为。尝试清理项目缓存并重新构建,确保所有配置文件和类文件都是最新的。 ---
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值