使用Spring DAO的NamedParameterJdbcTemplate处理大型数据集

时间:2015-05-06 16:53:43

标签: spring batch-processing large-data

使用NamedParameterJdbcTemplate,当我执行查询时,它会检索数百万个文档。我需要处理所有这些,但它们不必一次加载到内存中。如果应用程序不必指定其他查询子句(即不在()中使用primary_key,我如何批量处理结果集)

2 个答案:

答案 0 :(得分:1)

我认为您可以使用任何模板(SimpleJdbc,NamedJdbc或JdbcTemplate),前提是您使用ResultSetExtractor和RowMapper或使用任何其他分页技术以块的形式检索数据。你可以参考

Pagination Using Spring ResultSetExtractor

答案 1 :(得分:1)

我会说考虑使用本机查询,首先对您的数据进行排序,然后使用某种分页关键字TOP, LIMIT, ROWNUM(取决于您的数据库),根据页面返回数据块,将信息带到应用程序增加了网络流量,我相信数据库可以有效地完成这项任务。

有一个很好的弹簧批量模块,允许你使用

<bean id="cmrProcessReader" class="org.springframework.batch.item.database.JpaPagingItemReader" scope="step">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="queryString" value="SELECT cmr FROM CmrRequestEntity cmr where cmr.errorMessage is null and cmr.onThread = 0 and cmr.processed = 0 " />
    <property name="pageSize" value="10" /> 
</bean>

但我相信您没有使用JPA,因此请考虑使用本机查询。