Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Java:DynamoDBMapper

AWS SDK for Java 提供了 DynamoDBMapper 类,使您能够将客户端类映射到 DynamoDB 表。要使用 DynamoDBMapper,您应在代码中定义 DynamoDB 表中项目与其相应对象实例之间的关系。利用 DynamoDBMapper 类,您能够访问自己的表,执行各种创建、读取、更新和删除 (CRUD) 操作,并执行查询。

注意

DynamoDBMapper 类不允许创建、更新或删除表。要执行这些任务,请改用低级别 适用于 Java 的开发工具包 接口。有关更多信息,请参阅 处理表:Java

适用于 Java 的开发工具包 提供了一组注释类型,可用于将类映射到表。例如,我们来看一个使用 Id 作为分区键的 ProductCatalog 表。

Copy
ProductCatalog(Id, ...)

您可以将客户端应用程序中的类映射到 ProductCatalog 表 (如下面的 Java 代码所示)。该代码段定义了一个名为 CatalogItem 的普通旧 Java 对象 (POJO),此对象使用注释将对象字段映射到 DynamoDB 属性名称:

Copy
package com.amazonaws.codesamples; import java.util.Set; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; @DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private Integer id; private String title; private String ISBN; private Set<String> bookAuthors; private String someProp; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id;} public void setId(Integer id) {this.id = id;} @DynamoDBAttribute(attributeName="Title") public String getTitle() {return title; } public void setTitle(String title) { this.title = title; } @DynamoDBAttribute(attributeName="ISBN") public String getISBN() { return ISBN; } public void setISBN(String ISBN) { this.ISBN = ISBN; } @DynamoDBAttribute(attributeName = "Authors") public Set<String> getBookAuthors() { return bookAuthors; } public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; } @DynamoDBIgnore public String getSomeProp() { return someProp;} public void setSomeProp(String someProp) {this.someProp = someProp;} }

在上述代码中,@DynamoDBTable 注释将 CatalogItem 类映射到 ProductCatalog 表。您可以将各个类实例存储为表中的项目。在类定义中,@DynamoDBHashKey 注释将 Id 属性映射到主键。

默认情况下,类属性会映射到表中的同名属性。TitleISBN 属性会映射到表中的同名属性。

当 DynamoDB 属性的名称与类中声明的属性的名称匹配时,@DynamoDBAttribute 注释是可选的。当这两个名称不同时,请将此注释与 attributeName() 参数一起使用以指定此属性对应的 DynamoDB 属性。在上述示例中,@DynamoDBAttribute 注释将添加到每个属性中以确保属性名称与创建表并加载示例数据中创建的表完全匹配,并且与本指南中其他代码示例中使用的属性名称保持一致。

您的类定义的某些属性可以不用映射到表中的任何属性。您可以通过添加 @DynamoDBIgnore 注释来识别这些属性。在上述示例中,SomeProp 属性是使用 @DynamoDBIgnore 注释标记的。在将 CatalogItem 实例上传到该表时,您的 DynamoDBMapper 实例不包含 SomeProp 属性。另外,映射器也不会在您检索表中的项目时返回此属性。

在定义了映射类之后,可以使用 DynamoDBMapper 方法将该类的实例写入 Catalog 表的对应项目。以下代码段演示了此方法:

Copy
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDBMapper mapper = new DynamoDBMapper(client); CatalogItem item = new CatalogItem(); item.setId(102); item.setTitle("Book 102 Title"); item.setISBN("222-2222222222"); item.setBookAuthors(new HashSet<String>(Arrays.asList("Author 1", "Author 2"))); item.setSomeProp("Test"); mapper.save(item);

以下代码段说明如何检索该项目并访问它的某些属性:

Copy
CatalogItem partitionKey = new CatalogItem(); partitionKey.setId(102); DynamoDBQueryExpression<CatalogItem> queryExpression = new DynamoDBQueryExpression<CatalogItem>() .withHashKeyValues(partitionKey); List<CatalogItem> itemList = mapper.query(CatalogItem.class, queryExpression); for (int i = 0; i < itemList.size(); i++) { System.out.println(itemList.get(i).getTitle()); System.out.println(itemList.get(i).getBookAuthors()); }

DynamoDBMapper 提供了在 Java 内使用 DynamoDB 数据的一种直观而自然的方式。它还提供了一些内置功能,如乐观锁、自动生成的分区键和排序键值以及对象版本控制。