メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

Java: DynamoDBMapper

AWS SDK for Java は DynamoDBMapper クラスを提供し、クライアント側クラスを DynamoDB テーブルにマッピングできるようにします。DynamoDBMapper を使用するには、DynamoDB テーブル内の項目と、コードの対応するオブジェクトインスタンス間の関係を定義します。DynamoDBMapper クラスでは、テーブルへのアクセス、さまざまな作成、読み取り、更新、削除 (CRUD) オペレーションの実行、およびクエリを行うことができます。

注記

DynamoDBMapperクラスでは、テーブルを作成、更新、または削除することはできません。これらのタスクを実行するには、代わりに低レベル SDK for Java インターフェイスを使用します。詳細については、「テーブルの操作 : Java」を参照してください。

SDK for Java には一連の注釈タイプが用意されているので、クラスをテーブルにマッピングできます。たとえば、Id がパーティションキーになった ProductCatalog テーブルがあるとします。

Copy
ProductCatalog(Id, ...)

次の Java コードに示すように、クライアントアプリケーション内のクラスを ProductCatalog テーブルにマッピングすることができます。このコードスニペットでは、CatalogItem という名前の Plain Old Java Object (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 プロパティがプライマリキーにマッピングされます。

デフォルトでは、クラスプロパティはテーブル内の同じ名前属性にマッピングされます。プロパティ Title および ISBN は、テーブル内の同じ名前属性にマッピングされます。

DynamoDB 属性名がクラスで宣言されたプロパティ名と一致する場合、@DynamoDBAttribute 注釈はオプションです。異なると、この注釈で、このプロパティが DynamoDB のどの属性に対応するかを指定している attributeName() パラメータを使用します。前述の例では、各プロパティに @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 データを操作するための直観的で自然な方法を提供します。また、オプティミスティックロック、自動生成されるパーティションキーとソートキーの値、オブジェクトのバージョニングなど、複数の組み込み機能があります。