簡體   English   中英

當我的主鍵是字符串時,如何在Spring Batch中使用JdbcPagingItemReader?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM