Genere a TableSchema partir de una clase de datos - AWS SDK for Java 2.x

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 anotaciones que puede usar con una clase de datos para generar rápidamente una TableSchema para mapear sus clases a tablas.

Comience por crear una clase de datos que se ajuste a la especificación. JavaBean La especificación requiere que una clase tenga un constructor público sin argumentos, además de getters y setters para cada atributo de la clase. Incluya una anotación a nivel de clase para indicar que la clase de datos es una 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();