Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Genere a TableSchema
partir de una clase de datos
Un TableSchema
permite al cliente mejorado asignar valores de atributos de DynamoDB hacia y desde las clases del cliente. En este tutorial, conocerá los TableSchema
derivados de una clase de datos estáticos y generadas a partir de código mediante un generador.
Utilice una clase de datos anotada
El SDK para Java 2.x incluye un conjunto de anotacionesTableSchema
para mapear sus clases a tablas.
Comience por crear una clase de datos que se ajuste a la especificación. JavaBean DynamoDbBean
. Además, como mínimo, incluya una anotación DynamoDbPartitionKey
en el getter o setter para el atributo de clave principal.
Puede aplicar anotaciones a nivel de atributo a los captadores o a los definidores, pero no a ambos.
nota
El término property
se utiliza normalmente para un valor encapsulado en un. JavaBean Sin embargo, en esta guía se utiliza el término attribute
en su lugar para mantener la coherencia con la terminología utilizada por DynamoDB.
La Customer
clase siguiente muestra las anotaciones que vinculan la definición de la clase a una tabla de DynamoDB.
Clase 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 + "]"; } }
Una vez creada una clase de datos anotada, utilícela para crear el TableSchema
, como se muestra en el siguiente fragmento.
static final TableSchema<Customer> customerTableSchema = TableSchema.fromBean(Customer.class);
Un TableSchema
se diseña para ser estático e inmutable. Por lo general, puede instanciarlo en el momento de cargar la clase.
El método de TableSchema.fromBean()
fábrica estática realiza una introspección del bean para generar el mapeo de los atributos (propiedades) de las clases de datos hacia y desde los atributos de DynamoDB.
Para ver un ejemplo de cómo trabajar con un modelo de datos compuesto por varias clases de datos, consulte la clase Person
en la sección Trabaja con atributos que son beans, mapas, listas y conjuntos.
Uso de un constructor
Puede saltarse el coste de la introspección de objetos bean si define el esquema de la tabla en código. Si codifica el esquema, no es necesario que la clase siga los estándares de JavaBean nomenclatura ni que esté anotada. El siguiente ejemplo utiliza un constructor y es equivalente al ejemplo de clase Customer
que utiliza anotaciones.
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();