Générer un TableSchema à partir d'une classe de données - AWS SDK for Java 2.x

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Générer un TableSchema à partir d'une classe de données

A TableSchema permet au client amélioré de mapper les valeurs d'attribut DynamoDB vers et depuis vos classes côté client. Dans ce didacticiel, vous découvrirez TableSchema s dérivé d'une classe de données statique et généré à partir de code à l'aide d'un générateur.

Utiliser une classe de données annotée

Le SDK pour Java 2.x inclut un ensemble d'annotations que vous pouvez utiliser avec une classe de données pour générer TableSchema rapidement un fichier permettant de mapper vos classes à des tables.

Commencez par créer une classe de données conforme à la JavaBean spécification. La spécification exige qu'une classe ait un constructeur public sans argument et dispose de getters et setters pour chaque attribut de la classe. Incluez une annotation au niveau de la classe pour indiquer que la classe de données est une. DynamoDbBean Incluez également, au minimum, une DynamoDbPartitionKey annotation sur le getter ou le setter pour l'attribut clé primaire.

Vous pouvez appliquer des annotations au niveau des attributs aux getters ou aux setters, mais pas aux deux.

Note

Le terme property est normalement utilisé pour une valeur encapsulée dans un JavaBean. Toutefois, ce guide utilise ce terme à la attribute place, par souci de cohérence avec la terminologie utilisée par DynamoDB.

La Customer classe suivante affiche les annotations qui lient la définition de classe à une table 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 + "]"; } }

Après avoir créé une classe de données annotée, utilisez-la pour créer laTableSchema, comme indiqué dans l'extrait de code suivant.

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

A TableSchema est conçu pour être statique et immuable. Vous pouvez généralement l'instancier au moment du chargement de la classe.

La méthode static TableSchema.fromBean() factory introspecte le bean pour générer le mappage des attributs de classe de données (propriétés) vers et depuis les attributs DynamoDB.

Pour un exemple d'utilisation d'un modèle de données composé de plusieurs classes de données, consultez la Person classe dans la Utilisation d'attributs imbriqués section.

Utilisez un constructeur

Vous pouvez éviter le coût de l'introspection des haricots si vous définissez le schéma de table dans le code. Si vous codez le schéma, votre classe n'a pas besoin de suivre les normes de JavaBean dénomination ni d'être annotée. L'exemple suivant utilise un générateur et est équivalent à l'exemple de Customer classe qui utilise des annotations.

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