首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.St

mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.St

原创
作者头像
用户3672714
发布2025-07-16 15:51:39
发布2025-07-16 15:51:39
16000
代码可运行
举报
运行总次数:0
代码可运行

你这个错误:

invalid comparison: java.util.Arrays$ArrayList and java.lang.String

是 MyBatis 在处理 集合参数(如传入一个 List)时 SQL 拼接或比较语句写错 导致的典型异常。


关键错误原因总结

你 传了一个集合参数(List),但在 XML 的 SQL 语句中把它 当成字符串去比较 了,例如:

错误示例:

代码语言:javascript
代码运行次数:0
运行
复制
-- 这是错的!SELECT * FROM user WHERE id = #{idList}php48 Bytes© 菜鸟-创作你的创作

此时 idList 是一个 List<String>,你不能直接用 = 比较,它会导致:

代码语言:javascript
代码运行次数:0
运行
复制
invalid comparison: java.util.Arrays$ArrayList and java.lang.Stringphp67 Bytes© 菜鸟-创作你的创作

正确写法(使用 IN 和 foreach

假设你传入的是:

代码语言:javascript
代码运行次数:0
运行
复制
List<String> idList = Arrays.asList("001", "002", "003");mapper.findUsersByIdList(idList);php91 Bytes© 菜鸟-创作你的创作

Mapper 接口:

代码语言:javascript
代码运行次数:0
运行
复制
List<User> findUsersByIdList(@Param("idList") List<String> idList);php67 Bytes© 菜鸟-创作你的创作

XML 正确写法(使用 <foreach>):

代码语言:javascript
代码运行次数:0
运行
复制
<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 ...>

正确写法


调试建议

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

https://www.52runoob.com/archives/3797

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 假设你传入的是:
  • Mapper 接口:
  • XML 正确写法(使用 <foreach>):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档