我有一些SQL数据需要在Spring Batch中使用ItemReader访问。我认为JdbcPagingItemReader / PagingQueryProvider是最合适的。
我正在选择的表有一个主键,它由三列组成:INTEGER,VARCHAR和VARCHAR。实际上,对于这个用例,前两列对于给定作业中的每个记录都是相同的。因此,实际上就像主键列是VARCHAR一样。
接口定义要求:
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
}
我必须承认,在这种情况下,我发现文档并不特别有用。它似乎相当简洁,并做了很多假设。但这是关于这种特殊方法的说法:
生成将提供跳转到项目查询的查询。提供的itemIndex可以位于页面的中间,并与页面大小一起用于计算前一页的最后一个索引,以便能够检索该行的排序键。
我不喜欢文档假设我知道什么是“跳转到项目查询”而没有定义它。因为......我没有!什么是“跳转到项目查询”?我假设这是从表格中订购数字ID的范例运作的?或者这与LIMIT子句中的跳过值有关吗?
您可以提供任何指导。
答案 0 :(得分:1)
从查看提供的实现中可以很清楚。这是PostgresPagingQueryProvider
:
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
int page = itemIndex / pageSize;
int offset = (page * pageSize) - 1;
offset = offset<0 ? 0 : offset;
String limitClause = new StringBuilder().append("LIMIT 1 OFFSET ").append(offset).toString();
return SqlPagingQueryUtils.generateLimitJumpToQuery(this, limitClause);
}
所以你是对的,它与LIMIT
子句中的跳过值有关。