データクラスTableSchemaから を生成する - AWS SDK for Java 2.x

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データクラスTableSchemaから を生成する

TableSchema を使用すると、拡張クライアントは DynamoDB 属性値をクライアント側クラスとの間でマッピングできるようになります。このチュートリアルでは、静的データクラスから派生し、ビルダーを使用してコードから生成された TableSchema について説明します。

注釈付きデータクラスを使用する

SDK for Java 2.x には、データクラスと一緒に使用することで、Java Bean で使用して、クラスをテーブルにマッピングするための 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()ファクトリメソッドは、Bean を調べて、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();