如何将整数数组传递给MyBatis中的IN子句
我的Mybatis中有一个包含IN子句的查询,它基本上是一组Id(整数)
我现在停留在如何将一个Integer数组传递给这个IN子句,以便它提取正确的记录。通过将包含ID的String传递给IN子句,但这没有按预期工作。
代码示例如下
使用注释的Mybatis方法
@Select(SEL_QUERY) @Results(value = {@Result(property="id",column="ID")}) List getIds(@Param("usrIds") Integer[] usrIds);
询问
select distinct ID from table a where a.id in ( #{usrIds} )
方法调用
Integer[] arr = new Integer[2]; arr[0] = 1; arr[1] = 2; mapper.getIds(arr)
这不起作用,当我调用mapper方法时,Mybatis会抛出一个错误
请给我任何建议
关于动态SQL的myBatis用户指南有一个关于如何使用foreach循环来构建查询字符串的示例,该字符串适用于列表和数组。
在3.2版之前,你必须使用xml配置来使用动态sql,对于更新的版本,它也应该可以在注释中使用动态sql 。
是的,你可以使用注释来做到这一点。
如果你正在使用postgresql ,你可以在这篇文章中做。
如果您正在使用MySQL ,请在代码示例中尝试以下更改:
使用注释的Mybatis方法
@Select(SEL_QUERY) @Results(value = {@Result(property="id",column="ID")}) List getIds(@Param("usrIds") String usrIds);
查询(使用MySQL)
select distinct ID from table a where FIND_IN_SET( a.id, #{usrIds}) <> 0
方法调用
Integer[] arr = new Integer[2]; arr[0] = 1; arr[1] = 2; String usrIds= ""; for (int id : ids) { usrIds += id + ","; } mapper.getIds(usrIds)