java 如何使用DynamoDBMapper进行分页?

2wnc66cl  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(143)

我正在Quarkus中开发一个与DynamoDB数据库集成的应用程序。我有一个返回列表的查询方法,我希望此列表能够分页,但这必须通过传递参数手动完成。
我选择使用DynamoDBMapper是因为它提供了处理对象列表的更多可能性,并且复杂性级别较低。
有人知道如何在函数中手动进行分页吗?

56lgkhnf

56lgkhnf1#

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression()
        .withLimit(pageSize)
        .withExclusiveStartKey(paginationToken);
PaginatedScanList<YourModel> result = mapper.scan(YourModel.class, scanExpression);
String nextPaginationToken = result.getLastEvaluatedKey();

可以将pageSize和paginationToken作为参数传递给查询方法。nextPaginationToken可以与结果沿着返回,用于下一页。

mzmfm0qo

mzmfm0qo2#

DynamoDB Mapper通过迭代结果、延迟加载数据集来分页:
默认情况下,scan方法返回"延迟加载"集合。它最初仅返回一页结果,然后根据需要调用下一页的服务。要获取所有匹配项,请迭代结果集合。
参考
例如:

List<Customer> result = mapper.scan(Customer.class, scanExpression);

for ( Customer cust : result ) {
    System.out.println(cust.getId());
}

要手动逐页扫描,您可以使用ScanPage

final DynamoDBScanExpression scanPageExpression = new DynamoDBScanExpression()
        .withLimit(limit);
do {
    ScanResultPage<MyClass> scanPage = mapper.scanPage(MyClass.class, scanPageExpression);
    scanPage.getResults().forEach(System.out::println);
    System.out.println("LastEvaluatedKey=" + scanPage.getLastEvaluatedKey());
    scanPageExpression.setExclusiveStartKey(scanPage.getLastEvaluatedKey());

} while (scanPageExpression.getExclusiveStartKey() != null);

参考Ref

相关问题