mybatis xml中使用in的sql长度超过1000的解决办法

原来:   入参为List
 
WHERE name IS NOT NULL 
            
               AND DEVICE_ID in 
                  
                    #{createby} 
                     
             
 
效果  where xxx and  createby in (1,2,3,4,5)    但是in后边的数据超过1000会报错

改为: 入参为List>
 
WHERE name IS NOT NULL 
            
            and
           
             createby in 
            
              #{createby}
               
             
            
 
效果  where xxx and (createby in (1,2,3,4,5 .... ,999) or createby in(1000,1001,....,1040))  
还有一种效率低的方法: 入参为List,这种效率非常低,不推荐
 
WHERE name IS NOT NULL 
            
            and
             
               createby in #{createby}
              
            
 
效果  where xxx and (createby in 1  or  createby in 2  or  createby in 3   or  createby in  4  ) 
将List 划分为List> 
 
按指定大小,分隔集合,将集合按规定个数分为n个部分
 
private static List> splitList(List list, int len) {
		if (list == null || list.size() == 0 || len < 1) {
			return null;
		}
		List> result = new ArrayList>();
		int size = list.size();
		int count = (size + len - 1) / len;
		for (int i = 0; i < count; i++) {
			List subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
			result.add(subList);
		}
		return result;
	}

 

你可能感兴趣的