本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
TableSchema
從資料類別產生
A TableSchema
可讓增強型用戶端將 DynamoDB 屬性值對應至用戶端類別,或從用戶端類別對應。在本教程中,您將了解從靜態數據類中派生並使用構建器從代碼生成的 TableSchema
s。
使用帶註釋的數據類
適用於 Java 2.x 的 SDK 包含一組註釋TableSchema
於將類映射到表格的註釋。
首先創建一個符合JavaBean 規範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();