我正在Quarkus中开发一个与DynamoDB数据库集成的应用程序。我有一个返回列表的查询方法,我希望此列表能够分页,但这必须通过传递参数手动完成。我选择使用DynamoDBMapper是因为它提供了处理对象列表的更多可能性,并且复杂性级别较低。有人知道如何在函数中手动进行分页吗?
56lgkhnf1#
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression() .withLimit(pageSize) .withExclusiveStartKey(paginationToken); PaginatedScanList<YourModel> result = mapper.scan(YourModel.class, scanExpression); String nextPaginationToken = result.getLastEvaluatedKey();
可以将pageSize和paginationToken作为参数传递给查询方法。nextPaginationToken可以与结果沿着返回,用于下一页。
mzmfm0qo2#
DynamoDB Mapper通过迭代结果、延迟加载数据集来分页:默认情况下,scan方法返回"延迟加载"集合。它最初仅返回一页结果,然后根据需要调用下一页的服务。要获取所有匹配项,请迭代结果集合。参考例如:
List<Customer> result = mapper.scan(Customer.class, scanExpression); for ( Customer cust : result ) { System.out.println(cust.getId()); }
要手动逐页扫描,您可以使用ScanPage
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
2条答案
按热度按时间56lgkhnf1#
可以将pageSize和paginationToken作为参数传递给查询方法。nextPaginationToken可以与结果沿着返回,用于下一页。
mzmfm0qo2#
DynamoDB Mapper通过迭代结果、延迟加载数据集来分页:
默认情况下,scan方法返回"延迟加载"集合。它最初仅返回一页结果,然后根据需要调用下一页的服务。要获取所有匹配项,请迭代结果集合。
参考
例如:
要手动逐页扫描,您可以使用
ScanPage
参考Ref