[英]How do I use JdbcPagingItemReader in Spring Batch when my primary key is a string?
我有一些SQL數據,我需要使用Spring Batch中的ItemReader訪問。 我認為JdbcPagingItemReader / PagingQueryProvider將是完美的選擇。
我從中選擇的表具有一個主鍵,該鍵由三列組成:INTEGER,VARCHAR和VARCHAR。 實際上,對於此用例,給定作業中的每條記錄的前兩列將相同。 因此,有效地好像主鍵列是VARCHAR。
接口定義要求:
@Override
public String generateJumpToItemQuery(int itemIndex, int pageSize) {
}
我不得不承認,在這種情況下,我認為文檔沒有特別的幫助。 看起來很簡潔,並作了很多假設。 但是這是關於該特定方法的說明:
生成將提供跳轉到項目查詢的查詢。 提供的itemIndex可能位於頁面的中間,並且與頁面大小一起將用於計算前一頁的最后一個索引,以便能夠檢索此行的排序鍵。
我不喜歡該文檔假定我知道“跳轉到項目查詢”是什么而沒有定義它。 因為...我不知道! 什么是“跳轉到項目查詢”? 我假設這是從范式中進行的,即該表以數字ID排序? 還是這與LIMIT子句中的skip值有關?
您可以提供的任何指導表示贊賞。
從所提供的實現中可以很明顯地看出來。 這是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
子句中的skip值有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.