如何将整数数组传递给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) 
Interesting Posts