爪哇 1. X:D ynamoDBMapper - Amazon DynamoDB

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

爪哇 1. X:D ynamoDBMapper

注意

對SDK於 Java 有兩個版本:1.x 和 2.x。1.x 版已 end-of-support 於二零二四年一月十二日佈。它將及其截止日期 end-of-support 為 2025 年 12 月 31 日。對於新開發,我們強烈建議您使用 2.x。

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

注意

DynamoDBMapper 類別不允許您建立、更新或刪除資料表。若要執行這些工作,請改用 Java SDK 的低階介面。如需詳細資訊,請參閱在 Java 中使用 DynamoDB 資料表

SDKfor 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 註釋新增至每個屬性,確保屬性名稱完全符合「在 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事務,自動生成的分區鍵和排序鍵值以及對象版本控制。