你这个错误:
invalid comparison: java.util.Arrays$ArrayList and java.lang.String
是 MyBatis 在处理 集合参数(如传入一个 List)时 SQL 拼接或比较语句写错 导致的典型异常。
关键错误原因总结
你 传了一个集合参数(List),但在 XML 的 SQL 语句中把它 当成字符串去比较 了,例如:
错误示例:
-- 这是错的!SELECT * FROM user WHERE id = #{idList}php48 Bytes© 菜鸟-创作你的创作此时 idList 是一个 List<String>,你不能直接用 = 比较,它会导致:
invalid comparison: java.util.Arrays$ArrayList and java.lang.Stringphp67 Bytes© 菜鸟-创作你的创作 正确写法(使用 IN 和 foreach)
List<String> idList = Arrays.asList("001", "002", "003");mapper.findUsersByIdList(idList);php91 Bytes© 菜鸟-创作你的创作List<User> findUsersByIdList(@Param("idList") List<String> idList);php67 Bytes© 菜鸟-创作你的创作<foreach>):<select id="findUsersByIdList" resultType="User"> SELECT * FROM user WHERE id IN <foreach item="id" collection="idList" open="(" separator="," close=")"> #{id} </foreach></select>php192 Bytes© 菜鸟-创作你的创作小结
错误原因 | 修正方法 |
|---|---|
把 List 当成单个字符串比较了 | 用 <foreach> 构建 IN |
= #{list} | 错误!不要这样写 |
IN <foreach ...> | 正确写法 |
调试建议
= #{list} 或 = #{xxx}(xxx 是 List)<foreach> 是解决集合参数拼接的唯一正确方式collection="xxx" 必须是你传入的参数名(通常来自 @Param("xxx"))https://www.52runoob.com/archives/3797
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。