1. 程式人生 > >解決mybatis in語句不能大於1000的問題

解決mybatis in語句不能大於1000的問題

Java開發中會出現一種情況,就是使用mybatis 的in語句的時候,in語句裡面的陣列大小不能大於1000.

可以通過以下方法解決:

對於一個List<String> ids 大小大於1000的list而言,使用getSumArrayList方法,獲取List<List<String>> 物件

List<List<String>> idParams = shareEpdService.getSumArrayList(idParam);
	    	Map<String, Object> mapNew = new HashMap<>();
	    	mapNew.put("ids", idParams );
	    	settlementCostMapper.submitDataByCondition(mapNew)
呼叫mybatis的方法,做如下處理:
<update id="submitDataByCondition">
		UPDATE 表名 SET STATE=1 WHERE STATE IN (-1,0) 
		 <foreach collection="ids" item="idsItem">
                and id  in
                <foreach collection="idsItem" item="id" open="(" separator="," close=")">
                   #{id}
                </foreach>
            </foreach>
	</update>

getSumArrayList方法如下:
public <T>  List<List<T>> getSumArrayList(List<T> list){
        List<List<T>> objectlist = new ArrayList<>();
        int iSize = list.size()/1000;
        int iCount = list.size()%1000;
        for(int i=0;i<=iSize;i++){
            List<T> newObjList = new ArrayList<>();
            if(i==iSize){
                for(int j =i*1000;j<i*1000+iCount;j++ ){
                    newObjList.add(list.get(j));
                }
            }else{
                for(int j =i*1000;j<(i+1)*1000;j++ ){
                    newObjList.add(list.get(j));
                }
            }
            if(newObjList.size()>0){
                objectlist.add(newObjList);
            }
        }
        return objectlist;
    }