TableSchema從資料類別產生 - AWS SDK for Java 2.x

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

TableSchema從資料類別產生

A TableSchema 可讓增強型用戶端將 DynamoDB 屬性值對應至用戶端類別,或從用戶端類別對應。在本教程中,您將了解從靜態數據類中派生並使用構建器從代碼生成的 TableSchema s。

使用帶註釋的數據類

適用於 Java 2.x 的 SDK 包含一組註釋,您可以將其與數據類一起使用,以快速生成用TableSchema於將類映射到表格的註釋。

首先創建一個符合JavaBean 規範的數據類。該規範要求一個類有一個無參數的公共構造函數,並且具有類中每個屬性的 getter 和 setter。包含類別層級註解,以指出資料類別為DynamoDbBean. 此外,至少在主鍵屬性的 getter 或 setter 上包含DynamoDbPartitionKey註釋。

您可以將屬性級註釋應用於 getter 或 setter,但不能同時應用兩者。

注意

該術語property通常用於封裝在 JavaBean. 但是,本指南使attribute用的術語與 DynamoDB 使用的術語保持一致。

下列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);

A 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();