原来: 入参为List<String>
WHERE name IS NOT NULL
<if test="userids!=null and userids.size()>0" >
AND DEVICE_ID in
<foreach collection="userids" item="createby" open="(" separator="," close=")">
#{createby}
</foreach>
</if>
效果 where xxx and createby in (1,2,3,4,5) 但是in后边的数据超过1000会报错
改为: 入参为List<List<String>>
WHERE name IS NOT NULL
<if test="userids!=null and userids.size()>0" >
and
<foreach collection="userids" item="userid" open="(" separator="or" close=")">
createby in
<foreach collection="userid" item="createby" open="(" separator="," close=")">
#{createby}
</foreach>
</foreach>
</if>
效果 where xxx and (createby in (1,2,3,4,5 .... ,999) or createby in(1000,1001,....,1040))
还有一种效率低的方法: 入参为List<String>,这种效率非常低,不推荐
WHERE name IS NOT NULL
<if test="userids!=null and userids.size()>0" >
and
<foreach item="userids" index="index" collection="createby" open="(" separator="or" close=")">
createby in #{createby}
</foreach>
</if>
效果 where xxx and (createby in 1 or createby in 2 or createby in 3 or createby in 4 )
将List<String> 划分为List<List<String>>
按指定大小,分隔集合,将集合按规定个数分为n个部分
private static List<List<String>> splitList(List<String> list, int len) {
if (list == null || list.size() == 0 || len < 1) {
return null;
}
List<List<String>> result = new ArrayList<List<String>>();
int size = list.size();
int count = (size + len - 1) / len;
for (int i = 0; i < count; i++) {
List<String> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
result.add(subList);
}
return result;
}