Java 1.x:DynamoDBMapper - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Java 1.x:DynamoDBMapper

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

注意

DynamoDBMapper 类不允许创建、更新或删除表。要执行这些任务,请改用低级别 SDK for Java 接口。有关更多信息,请参见 在 Java 中使用 DynamoDB 表

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

ProductCatalog(Id, ...)

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

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 注释将添加到每个属性中以确保属性名称与为 DynamoDB 中的代码示例创建表和加载数据中创建的表完全匹配,并且与本指南中其他代码示例中使用的属性名称保持一致。

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

在定义了映射类之后,可以使用 DynamoDBMapper 方法将该类的实例写入 Catalog 表的对应项目。以下代码示例展示了这一技术。

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);

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

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 数据的一种直观而自然的方式。它还提供了一些内置功能,如乐观锁、ACID 事务、自动生成的分区键和排序键值以及对象版本控制。