我只是想知道在Spring Batch的OneToManyResultSetExtractor
中使用ResultSetExtractor
还是JdbcCursorItemReader
?
我遇到的问题是,预期的RowMapper
只处理每行一个对象,并且我有一个连接sql查询,每个对象返回许多行。
答案 0 :(得分:1)
开箱即用,它不支持使用ResultSetExtractor
。这样做的原因是包装ItemReader
是有状态的,并且需要能够跟踪已经消耗了多少行(否则它不会知道)。通常在Spring Batch中完成此类功能的方法是使用ItemProcessor
来丰富对象。你的ItemReader
会返回一个(一个到多个),然后ItemProcessor
会用多个来丰富对象。这是批处理中常见的模式,称为驱动查询模式。您可以在Spring Batch文档中阅读更多相关信息:http://docs.spring.io/spring-batch/trunk/reference/html/patterns.html
话虽这么说,你也可以用你自己的实现来包装JdbcCursorItemReader
,为你执行聚合逻辑。