//通用方法,查询时防止sql in中的数据过多

public <T> List<T> commonQueryObjList(List<String> queryCodeList, String sql, int maxNum) {

List<T> resultList = new ArrayList<T>();

if (queryCodeList == null || queryCodeList.size() == 0) {

return resultList;

}

//防止入参被修改掉

List<String> tmpPlanCodeList = new ArrayList<String>();

tmpPlanCodeList.addAll(queryCodeList);

//

Map<String, List<String>> map = new HashMap<String, List<String>>();

while (tmpPlanCodeList.size() > maxNum) {

map.put("queryCodeList", tmpPlanCodeList.subList(0, maxNum));//左闭右开

List<T> relList = (List<T>) queryPageData(sql, map);

if (relList.size() > 0) {

resultList.addAll(relList);

}

tmpPlanCodeList = 

                              tmpPlanCodeList.subList(maxNum, tmpPlanCodeList.size());

}//

if (tmpPlanCodeList.size() > 0) {

map.put("queryCodeList", tmpPlanCodeList);

List<T> relList = (List<T>) queryPageData(sql, map);

if (relList.size() > 0) {

resultList.addAll(relList);

}

}

return resultList;

}


//通用方法,防止每次查询时,返回的数据量过大

public Object queryPageData(String sql, Object param) {

     List<Object> part = null;

     List<Object> resultList = new ArrayList<Object>();

     int maxCount = SqlMapClientFactoryBean.maxRowCount - 1;

     do {

part = (List<Object>) this.getSqlMapClientTemplate().queryForList(sql, param, resultList.size(), maxCount);

if (part != null && part.size() > 0) {

resultList.addAll(part);

}

      } while (part != null && part.size() >= maxCount);

       return resultList;

}


1)这是一个通用的查询方法,解决ibatis查询返回最大数据量的问题。

  public List queryForList(String statementName, Object parameterObject, 

   int skipResults, int maxResults); 


2)对应的ibatis中的sql如何设置

<select id="prodremotecache.queryPlanDutyRelList"  parameterClass="java.util.Map"  resultClass="RemoteCachePlanDutyRelDTO">

select pi.plan_code planCode,

      di.duty_code dutyCode,

      pdr.formula_id formulaId,

      pfi.formula_type formulaType,

      pfi.formula

 from plan_duty_relation pdr,

      plan_info          pi,

      duty_info          di,

      prod_formula_info  pfi

where pdr.id_plan_info = pi.id_plan_info

  and pdr.id_duty_info = di.id_duty_info

  and pdr.formula_id = pfi.id_prod_formula_info(+)

  and pi.plan_code  in 

  <iterate property="queryCodeList" open="(" close=")" conjunction=",">

                    #queryCodeList[]#

               </iterate>

</select>