您有几个不同的选项DynamoDBMapper
,具体取决于您想要的方式。
这里的部分是理解方法之间的区别,以及它们返回的对象封装了什么功能。
我会复习一下PaginatedScanList
and ScanResultPage
,但是这些方法/对象基本上是相互镜像的。
说以下PaginatedScanList
,强调我的:
表示 AWS DynamoDB 中的扫描结果的 List 接口的实现。当用户执行需要它们的操作时,会按需加载分页结果。某些操作,例如 size(),必须获取整个列表,但结果会尽可能地逐页延迟获取。
这表示在您遍历列表时会加载结果。当您浏览第一页时,会自动获取第二页,而无需您明确提出另一个请求。延迟加载结果是默认方法,但如果您调用重载方法并为 aDynamoDBMapperConfig
提供不同的DynamoDBMapperConfig.PaginationLoadingStrategy
.
这与ScanResultPage
. 您将获得一页结果,由您自己处理分页。
下面是一个快速代码示例,显示了我使用 DynamoDBLocal 对包含 5 个项目的表运行的两种方法的示例用法:
final DynamoDBMapper mapper = new DynamoDBMapper(client);
// Using 'PaginatedScanList'
final DynamoDBScanExpression paginatedScanListExpression = new DynamoDBScanExpression()
.withLimit(limit);
final PaginatedScanList<MyClass> paginatedList = mapper.scan(MyClass.class, paginatedScanListExpression);
paginatedList.forEach(System.out::println);
System.out.println();
// using 'ScanResultPage'
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);
和输出:
MyClass{hash=2}
MyClass{hash=1}
MyClass{hash=3}
MyClass{hash=0}
MyClass{hash=4}
MyClass{hash=2}
MyClass{hash=1}
LastEvaluatedKey={hash={N: 1,}}
MyClass{hash=3}
MyClass{hash=0}
LastEvaluatedKey={hash={N: 0,}}
MyClass{hash=4}
LastEvaluatedKey=null