当我的主键是字符串时,如何在Spring Batch中使用JdbcPagingItemReader?

时间:2015-05-19 21:08:42

标签: java spring-batch spring-jdbc

我有一些SQL数据需要在Spring Batch中使用ItemReader访问。我认为JdbcPagingItemReader / PagingQueryProvider是最合适的。

我正在选择的表有一个主键,它由三列组成:INTEGER,VARCHAR和VARCHAR。实际上,对于这个用例,前两列对于给定作业中的每个记录都是相同的。因此,实际上就像主键列是VARCHAR一样。

接口定义要求:

@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {

}

我必须承认,在这种情况下,我发现文档并不特别有用。它似乎相当简洁,并做了很多假设。但这是关于这种特殊方法的说法:

  

生成将提供跳转到项目查询的查询。提供的itemIndex可以位于页面的中间,并与页面大小一起用于计算前一页的最后一个索引,以便能够检索该行的排序键。

我不喜欢文档假设我知道什么是“跳转到项目查询”而没有定义它。因为......我没有!什么是“跳转到项目查询”?我假设这是从表格中订购数字ID的范例运作的?或者这与LIMIT子句中的跳过值有关吗?

您可以提供任何指导。

1 个答案:

答案 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子句中的跳过值有关。