我如何使用JdbcPagingItemReader在春季批处理时,我的主键是一个字符串



我有一些SQL数据,我需要在Spring Batch中使用ItemReader访问。我认为JdbcPagingItemReader/PagingQueryProvider将是完美的选择。

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

接口定义要求:

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

我必须承认,在这种情况下,我没有发现文档有特别的帮助。它看起来很简洁,而且做了很多假设。这里是关于这个特定方法的说明:

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

我不喜欢文档假设我知道"跳转到项目查询"是什么而没有定义它。因为…我不!什么是"跳转到项目查询"?我假设这是从范式操作,那里的表是用数字ID排序?或者这与LIMIT子句中的跳过值有关吗?

从所提供的实现中可以很清楚地看出这一点。这是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子句中的跳过值有关。

相关内容

  • 没有找到相关文章

最新更新