//通用方法,查询时防止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>
转载于:https://blog.51cto.com/6817977/1630551