【发布时间】:2018-07-25 16:46:41
【问题描述】:
我正在使用 Spring Batch + Spring JDBC。在我的项目中,我们将帐户列表传递给本机 SQL 的 IN 查询。在 IN 参数中,我们最多可以传递 999 条记录和我们再次需要处理的剩余列表。
我开发了以下代码,但如果我有超过 2000 条记录,则效果不佳。我怎样才能使动态,所以如果代码中有任何列表值应该生成结果?
if(accNumList.size() < 999) {
Map<String, Set<Integer>> singletonMap = Collections.singletonMap("valSet1", accNumList);
Map<String, Object> paramMap = new HashMap<>();
paramMap.putAll(singletonMap);
paramMap.put("isFlag", "Y");
List<Map<String, Object>> queryForMap = namedParameterJdbcTemplate.queryForList(sql, paramMap);
}else {
int sizeOfRecords = accNumList.size();
// convert set to List
List<Integer> data = new ArrayList<>(accNumList);
List<Integer> subItems = data.subList(0, 999);
Map<String, List<Integer>> singletonMap = Collections.singletonMap("valSet1", subItems);
Map<String, Object> paramMap = new HashMap<>();
paramMap.putAll(singletonMap);
List<Map<String, Object>> queryForMap = namedParameterJdbcTemplate.queryForList(sql, paramMap);
// remaining
int remaining = sizeOfRecords - 999;
List<Integer> newsubItems = data.subList(1000, remaining);
Map<String, List<Integer>> newsingletonMap = Collections.singletonMap("valSet1", newsubItems);
Map<String, Object> newparamMap = new HashMap<>();
newparamMap.putAll(newsingletonMap);
List<Map<String, Object>> newqueryForMap = namedParameterJdbcTemplate.queryForList(sql, newparamMap);
//final
List<Map<String, Object>> queryForMapFinal = new ArrayList<>();
queryForMapFinal.add(paramMap);
queryForMapFinal.add(newparamMap);
}
【问题讨论】:
标签: java oracle spring-jdbc