Java 1.x:DynamoDBMapper - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Java 1.x:DynamoDBMapper

注意

SDK 適用於 Java 的 有兩種版本:1.x 和 2.x。適用於 1.x 的 end-of-support已於 2024 年 1 月 12 日發佈。該版本和其 end-of-support到期日為 2025 年 12 月 31 日。對於新開發,強烈建議您使用 2.x。

AWS SDK for Java 提供 DynamoDBMapper類別,可讓您將用戶端類別對應至 Amazon DynamoDB 資料表。若要使用 DynamoDBMapper,請定義 DynamoDB 資料表中項目與程式碼中其對應物件執行個體之間的關係。DynamoDBMapper 類別可讓您對項目執行各種建立、讀取、更新和刪除 (CRUD) 操作,以及針對資料表執行查詢和掃描。

注意

DynamoDBMapper 類別不允許您建立、更新或刪除資料表。若要執行這些任務,請改用 Java 介面SDK的低階 。

SDK 適用於 Java 的 提供一組註釋類型,讓您可以將類別映射至資料表。例如,考量其 Id 為分割區索引鍵的 ProductCatalog 資料表。

ProductCatalog(Id, ...)

您可以將用戶端應用程式中的類別映射至 ProductCatalog 資料表,如下列 Java 程式碼所示。此程式碼定義名為 的純舊 Java 物件 (POJO)CatalogItem,它使用註釋將物件欄位映射到 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註釋會新增至每個屬性,以確保屬性名稱與上一個步驟中建立的資料表完全相符,並與本指南中其他程式碼範例中使用的屬性名稱一致。

類別定義可以有未映射至資料表中任何屬性的屬性。您可以新增 @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交易、自動產生的分割區金鑰和排序金鑰值,以及物件版本控制。