Java 1.x : DynamoDBMapper - Amazon DynamoDB

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.

Java 1.x : DynamoDBMapper

AWS SDK for Java fournit une DynamoDBMapper classe qui vous permet de mapper vos classes côté client aux tables Amazon DynamoDB. Pour utiliser DynamoDBMapper, vous définissez la relation entre éléments d'une table DynamoDB et leurs instances d'objet correspondantes dans votre code. La classe DynamoDBMapper vous permet d'effectuer diverses opérations de création, de lecture, de mise à jour et de suppression (opérations CRUD) sur des éléments, ainsi que d'exécuter des requêtes et analyses sur des tables.

Note

La classe DynamoDBMapper ne vous permet pas de créer, de mettre à jour ou de supprimer des tables. Pour effectuer ces tâches, utilisez plutôt l'interface du kit SDK de bas niveau pour Java. Pour plus d’informations, consultez Utilisation des tables DynamoDB dans Java.

Le kit SDK pour Java fournit un ensemble de types d'annotations qui vous permettent de mapper vos classes à des tables. Par exemple, imaginons une table ProductCatalog ayant Id en tant que clé de partition.

ProductCatalog(Id, ...)

Vous pouvez mapper une classe de votre application client à la table ProductCatalog, comme illustré dans le code Java suivant. Cet exemple de code définit un objet Java ancien brut (Plain Old Java Object, POJO) nommé CatalogItem qui utilise des annotations pour mapper des champs d'objet à des noms d'attribut DynamoDB.

Exemple
package com.amazonaws.codesamples; import java.util.Set; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; @DynamoDBTable(tableName="ProductCatalog") public class CatalogItem { private Integer id; private String title; private String ISBN; private Set<String> bookAuthors; private String someProp; @DynamoDBHashKey(attributeName="Id") public Integer getId() { return id; } public void setId(Integer id) {this.id = id; } @DynamoDBAttribute(attributeName="Title") public String getTitle() {return title; } public void setTitle(String title) { this.title = title; } @DynamoDBAttribute(attributeName="ISBN") public String getISBN() { return ISBN; } public void setISBN(String ISBN) { this.ISBN = ISBN; } @DynamoDBAttribute(attributeName="Authors") public Set<String> getBookAuthors() { return bookAuthors; } public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; } @DynamoDBIgnore public String getSomeProp() { return someProp; } public void setSomeProp(String someProp) { this.someProp = someProp; } }

Dans le code précédent, l'annotation @DynamoDBTable mappe la classe CatalogItem à la table ProductCatalog. Vous pouvez stocker des instances de classe individuelles en tant qu'éléments dans la table. Dans la définition de classe, l'annotation @DynamoDBHashKey mappe l'Id de propriété à la clé primaire.

Par défaut, les propriétés de classe mappent avec les mêmes attributs de nom dans la table. Les propriétés Title et ISBN mappent avec les mêmes attributs de nom dans la table.

L'annotation @DynamoDBAttribute est facultative si le nom de l'attribut DynamoDB correspond au nom de la propriété déclarée dans la classe. Si les noms diffèrent, utilisez cette annotation avec le paramètre attributeName pour spécifier l'attribut DynamoDB auquel cette propriété correspond.

Dans l'exemple précédent, l'annotation @DynamoDBAttribute est ajoutée à chaque propriété afin de garantir que les noms de propriété correspondent exactement aux tables créées dans Création de tables et chargement de données pour des exemples de code dans DynamoDB et d'assurer la cohérence avec les noms d'attributs utilisés dans d'autres exemples de code dans ce guide.

Votre définition de classe peut avoir des propriétés qui ne mappent avec aucun attribut de la table. Vous identifiez ces propriétés en ajoutant l'annotation @DynamoDBIgnore. Dans l'exemple précédent, la propriété SomeProp est marquée avec l'annotation @DynamoDBIgnore. Lorsque vous téléchargez une instance CatalogItem vers la table, votre instance DynamoDBMapper n'inclut pas de propriété SomeProp. En outre, l'outil de mappage ne retourne pas cet attribut lorsque vous récupérez un élément de la table.

Une fois que vous avez défini votre classe de mappage, vous pouvez utiliser des méthodes DynamoDBMapper pour écrire une instance de cette classe d'un élément correspondant dans la table Catalog. L'exemple de code suivant illustre cette technique.

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDBMapper mapper = new DynamoDBMapper(client); CatalogItem item = new CatalogItem(); item.setId(102); item.setTitle("Book 102 Title"); item.setISBN("222-2222222222"); item.setBookAuthors(new HashSet<String>(Arrays.asList("Author 1", "Author 2"))); item.setSomeProp("Test"); mapper.save(item);

L'exemple de code suivant montre comment récupérer l'élément et accéder à certains de ses attributs :

CatalogItem partitionKey = new CatalogItem(); partitionKey.setId(102); DynamoDBQueryExpression<CatalogItem> queryExpression = new DynamoDBQueryExpression<CatalogItem>() .withHashKeyValues(partitionKey); List<CatalogItem> itemList = mapper.query(CatalogItem.class, queryExpression); for (int i = 0; i < itemList.size(); i++) { System.out.println(itemList.get(i).getTitle()); System.out.println(itemList.get(i).getBookAuthors()); }

DynamoDBMapper offre un moyen intuitif, naturel d'utiliser des données DynamoDB dans Java. Il offre aussi différentes fonctionnalités intégrées telles que le verrouillage optimiste, les transactions ACID, les valeurs de clé de tri et de clé de partition générées automatiquement et la gestion des versions d'objet.