Menghasilkan TableSchema dari kelas data - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghasilkan TableSchema dari kelas data

A TableSchema memungkinkan klien yang disempurnakan untuk memetakan nilai atribut DynamoDB ke dan dari kelas sisi klien Anda. Dalam tutorial ini, Anda belajar tentang TableSchema s yang berasal dari kelas data statis dan dihasilkan dari kode dengan menggunakan pembangun.

Gunakan kelas data beranotasi

The SDK for Java 2.x mencakup serangkaian anotasi yang dapat Anda gunakan dengan kelas data untuk menghasilkan dengan cepat TableSchema untuk memetakan kelas Anda ke tabel.

Mulailah dengan membuat kelas data yang sesuai dengan JavaBean spesifikasi. Spesifikasi mensyaratkan bahwa kelas memiliki konstruktor publik tanpa argumen dan memiliki getter dan setter untuk setiap atribut di kelas. Sertakan anotasi tingkat kelas untuk menunjukkan bahwa kelas data adalah a. DynamoDbBean Juga, minimal, sertakan DynamoDbPartitionKey anotasi pada pengambil atau penyetel untuk atribut kunci utama.

Anda dapat menerapkan anotasi tingkat atribut ke getter atau setter, tetapi tidak keduanya.

catatan

Istilah property ini biasanya digunakan untuk nilai yang dienkapsulasi dalam a. JavaBean Namun, panduan ini menggunakan istilah attribute sebagai gantinya, agar konsisten dengan terminologi yang digunakan oleh DynamoDB.

CustomerKelas berikut menunjukkan anotasi yang menghubungkan definisi kelas ke tabel DynamoDB.

Customer kelas

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 + "]"; } }

Setelah Anda membuat kelas data beranotasi, gunakan untuk membuatTableSchema, seperti yang ditunjukkan pada cuplikan berikut.

static final TableSchema<Customer> customerTableSchema = TableSchema.fromBean(Customer.class);

A TableSchema dirancang untuk menjadi statis dan tidak dapat diubah. Anda biasanya dapat membuat instance pada waktu pemuatan kelas.

Metode TableSchema.fromBean() pabrik statis mengintrospeksi kacang untuk menghasilkan pemetaan atribut kelas data (properti) ke dan dari atribut DynamoDB.

Untuk contoh bekerja dengan model data yang terdiri dari beberapa kelas data, lihat Person kelas di Bekerja dengan atribut yang kacang, peta, daftar, dan set bagian tersebut.

Gunakan pembangun

Anda dapat melewatkan biaya introspeksi kacang jika Anda menentukan skema tabel dalam kode. Jika Anda membuat kode skema, kelas Anda tidak perlu mengikuti standar JavaBean penamaan dan juga tidak perlu dianotasi. Contoh berikut menggunakan pembangun dan setara dengan contoh Customer kelas yang menggunakan anotasi.

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