直接使用数据库教程的分页sql获得子集.而不在内存中操作. 这样的好处是将子集放到一个中间结果里,每次再将中间结果合并到目标结果集.避免内存中同时出现二个大的结果集
1. 一种全部查询到内存,然后使用subList, subList的场景比如in参数的限制.
private List
List
if (cpcList == null || cpcList.size() <= 0)
return null;
List
int group = cpcList.size() % IDS_PER_BATCH == 0 ? cpcList.size()
/ IDS_PER_BATCH : (cpcList.size() / IDS_PER_BATCH + 1);
for (int i = 0; i < group; i++) {
String sql = "SELECT * FROM QUALITYHISTORY A WHERE A.GROUPID="
+ groupid
+ " AND A.ACCOUNTID="
+ accountid
+ " AND A.KEY IN ("
+ DtoBaseUtility
.getOtherStringFromEntitySet(
cpcList
.subList(
i * IDS_PER_BATCH,
((i + 1) * IDS_PER_BATCH) > cpcList
.size() ? cpcList
.size()
: ((i + 1) * IDS_PER_BATCH)),
CpcKeyDTO.class, "getKey") + ")";
;
List
.queryWithSpecifiedClassType(sql, QualityHistory.class,
jdbcTemplateCpc);
if (ls != null) {
res.addAll(ls);
}
}
return res;
}
.
......
for (int pageNo = 1; pageNo <= totalPageCount; pageNo++) {
doPage(sql, pageNo, set);
}......
private void doPage(String sql, int pageNo, Setset) {
long t1 = System.currentTimeMillis();
final int startIndex = PageUtil.getStartOfPage(pageNo, pageSize);
String sqlLimit = PageUtil.getLimitString(sql, true);
Object[] obj = new Object[] { startIndex, startIndex + pageSize };
Listlist = jdbcTemplateCpc.query(sqlLimit, obj,
new RowMapper() {@Override
public Object mapRow(ResultSet rs, int arg1)
throws SQLException {
return "" + rs.getString(2) + rs.getString(1);
}});
set.addAll(list);
long t2 = System.currentTimeMillis();
logger.info("第" + pageNo + "次查询数据量" + list.size() + ",set中现有"
+ set.size() + "条记录,耗时" + ((t2 - t1) / 1000) + "秒");
}
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去