翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
データクラスTableSchema
から を生成する
TableSchema
を使用すると、拡張クライアントは DynamoDB 属性値をクライアント側クラスとの間でマッピングできるようになります。このチュートリアルでは、静的データクラスから派生し、ビルダーを使用してコードから生成された TableSchema
について説明します。
注釈付きデータクラスを使用する
SDK for Java 2.x には、データクラスで使用できる一連の注釈TableSchema
するための をすばやく生成できます。
まず、JavaBean 仕様DynamoDbBean
であることを示すクラスレベルの注釈を含めます。また、少なくとも、 getters と setters にはプライマリキー属性の DynamoDbPartitionKey
注釈を含めます。
属性レベルの注釈はゲッターやセッターに適用できますが、両方に適用することはできません。
注記
用語property
は通常、 にカプセル化された値に使用されます JavaBean。ただし、このガイドでは、DynamoDB で使用されている用語との一貫性を保つため、代わりに attribute
という用語を使用しています。
次のCustomer
クラスは、クラス定義を DynamoDB テーブルにリンクする注釈を示しています。
Customer
クラス
package org.example.tests.model; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey; import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbSortKey; import java.time.Instant; @DynamoDbBean public class Customer { private String id; private String name; private String email; private Instant regDate; @DynamoDbPartitionKey public String getId() { return this.id; } public void setId(String id) { this.id = id; } public String getCustName() { return this.name; } public void setCustName(String name) { this.name = name; } @DynamoDbSortKey public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public Instant getRegistrationDate() { return this.regDate; } public void setRegistrationDate(Instant registrationDate) { this.regDate = registrationDate; } @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", email=" + email + ", regDate=" + regDate + "]"; } }
注釈付きデータクラスを作成したら、次のスニペットに示すように、それを使って TableSchema
を作成します。
static final TableSchema<Customer> customerTableSchema = TableSchema.fromBean(Customer.class);
TableSchema
は静的で変更不可能であるように設計されています。通常、クラスロード時にインスタンス化できます。
静的TableSchema.fromBean()
ファクトリーメソッドは、ビーンをイントロスペクションして、DynamoDB 属性との間でデータクラス属性 (プロパティ) のマッピングを生成します。
複数のデータクラスで構成されるデータモデルの操作例については、ビーン、マップ、リスト、セットである属性を操作する セクションの「Person
クラス」を参照してください。
ビルダーを使用する
テーブルスキーマをコードで定義すれば、Bean イントロスペクションのコストを省くことができます。スキーマをコーディングする場合、クラスは JavaBean 命名基準に従う必要はなく、注釈を付ける必要もありません。次の例ではビルダーを使用しており、注釈を使用する Customer
クラスの例と同じです。
static final TableSchema<Customer> customerTableSchema = TableSchema.builder(Customer.class) .newItemSupplier(Customer::new) .addAttribute(String.class, a -> a.name("id") .getter(Customer::getId) .setter(Customer::setId) .tags(StaticAttributeTags.primaryPartitionKey())) .addAttribute(String.class, a -> a.name("email") .getter(Customer::getEmail) .setter(Customer::setEmail) .tags(StaticAttributeTags.primarySortKey())) .addAttribute(String.class, a -> a.name("name") .getter(Customer::getCustName) .setter(Customer::setCustName)) .addAttribute(Instant.class, a -> a.name("registrationDate") .getter(Customer::getRegistrationDate) .setter(Customer::setRegistrationDate)) .build();