mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String
·
你这个错误:
invalid comparison: java.util.Arrays$ArrayList and java.lang.String
是 MyBatis 在处理 集合参数(如传入一个 List)时 SQL 拼接或比较语句写错 导致的典型异常。
✅ 关键错误原因总结
你 传了一个集合参数(List),但在 XML 的 SQL 语句中把它 当成字符串去比较 了,例如:
❌ 错误示例:
-- 这是错的!
SELECT * FROM user WHERE id = #{idList}
此时 idList 是一个 List<String>,你不能直接用 = 比较,它会导致:
invalid comparison: java.util.Arrays$ArrayList and java.lang.String
✅ 正确写法(使用 IN 和 foreach)
假设你传入的是:
List<String> idList = Arrays.asList("001", "002", "003");
mapper.findUsersByIdList(idList);
Mapper 接口:
List<User> findUsersByIdList(@Param("idList") List<String> idList);
XML 正确写法(使用 <foreach>):
<select id="findUsersByIdList" resultType="User">
SELECT * FROM user
WHERE id IN
<foreach item="id" collection="idList" open="(" separator="," close=")">
#{id}
</foreach>
</select>
💥 小结
| 错误原因 | 修正方法 |
|---|---|
把 List 当成单个字符串比较了 |
用 <foreach> 构建 IN |
= #{list} |
❌ 错误!不要这样写 |
IN <foreach ...> |
✅ 正确写法 |
🛠️ 调试建议
-
检查你 XML 里是不是写了
= #{list}或= #{xxx}(xxx 是 List) -
用
<foreach>是解决集合参数拼接的唯一正确方式 -
collection="xxx"必须是你传入的参数名(通常来自@Param("xxx"))
如果你发一下你当前的 XML 片段和 Java 参数定义,我可以 精确地帮你改正这一句 SQL。要不要?
mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String - 菜鸟-创作你的创作
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)