As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Gere um TableSchema
a partir de uma classe de dados
O TableSchema
permite que o cliente avançado mapeie valores de atributos do DynamoDB de e para suas classes do lado do cliente. Neste tutorial, você aprenderá sobre TableSchema
s derivados de uma classe de dados estática e gerados a partir de código usando um construtor.
Usar uma classe de dados anotada
O SDK for Java 2.x inclui um conjunto de anotaçõesTableSchema
para mapear suas classes em tabelas.
Comece criando uma classe de dados que esteja em conformidade com a JavaBean especificaçãoDynamoDbBean
. Além disso, no mínimo, inclua uma anotação DynamoDbPartitionKey
no getter ou setter do atributo da chave primária.
Você pode aplicar anotações em nível de atributo a getters ou setters, mas não a ambos.
nota
O termo property
é normalmente usado para um valor encapsulado em um. JavaBean No entanto, no lugar desse termo, este guia usa o termo attribute
, para ser consistente com a terminologia usada pelo DynamoDB.
A Customer
classe a seguir mostra anotações que vinculam a definição da classe a uma tabela do DynamoDB.
Classe 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 + "]"; } }
Depois de criar uma classe de dados anotada, use-a para criar o TableSchema
, como será mostrado no trecho a seguir.
static final TableSchema<Customer> customerTableSchema = TableSchema.fromBean(Customer.class);
Um TableSchema
é projetado para ser estático e imutável. Normalmente, você pode instanciá-lo no momento do carregamento da classe.
O método static TableSchema.fromBean()
factory faz uma introspecção do bean para gerar o mapeamento dos atributos (propriedades) da classe de dados de e para os atributos do DynamoDB.
Para ver um exemplo de como trabalhar com um modelo de dados composto por várias classes de dados, consulte a classe Person
na seção Trabalhe com atributos que são beans, mapas, listas e conjuntos.
Usar um construtor
Você pode ignorar o custo da introspecção do bean se definir o esquema da tabela no código. Se você codificar o esquema, sua classe não precisará seguir os padrões de JavaBean nomenclatura nem precisará ser anotada. O exemplo a seguir usa um construtor e é equivalente ao exemplo de classe Customer
que usa anotações.
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();