gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:11:27 25 4
gpt4 key购买 nike

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

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

接口(interface)定义需要这样:

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

}

我必须承认,我认为文档在这种情况下没有特别帮助。它看起来相当简洁并且做出了很多假设。但它是关于该特定方法的说明:

Generate the query that will provide the jump to item query. The itemIndex provided could be in the middle of the page and together with the page size it will be used to calculate the last index of the preceding page to be able to retrieve the sort key for this row.

我不喜欢文档假设我知道“跳转到项目查询”是什么而没有定义它。因为……我不!什么是“跳转到项目查询”?我假设这是按照表用数字 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子句中的跳过值有关。

关于java - 当我的主键是字符串时,如何在 Spring Batch 中使用 JdbcPagingItemReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com