你这个错误:

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 ...>✅ 正确写法

🛠️ 调试建议

  1. 检查你 XML 里是不是写了 = #{list} 或 = #{xxx}(xxx 是 List)
  2. 用 <foreach> 是解决集合参数拼接的唯一正确方式
  3. collection="xxx" 必须是你传入的参数名(通常来自 @Param("xxx")