Generación de un 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 asignar sus clases a tablas.
Comience por crear una clase de datos que cumpla con la especificación JavaBeanDynamoDbBean. Además, como mínimo, incluya una anotación DynamoDbPartitionKey en el getter o setter para el atributo de clave principal.
Puede aplicar anotaciones de nivel de atributo a getters o setters, 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 clase siguiente Customer muestra anotaciones que vinculan la definición de clase a una tabla de DynamoDB.
CustomerClase
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 fábrica estático TableSchema.fromBean() introspecciona el objeto bean para generar la asignación de atributos (propiedades) de la clase de datos a 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 Uso de 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 su clase siga las normas de denominación de JavaBean 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();