你这个错误:
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")
)
发表回复