Java 1.x : D ynamoDBMapper - 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 : D ynamoDBMapper

Note

SDKPour Java, il existe deux versions : 1.x et 2.x. Le end-of-support for 1.x a été annoncé le 12 janvier 2024. Il le sera et end-of-support doit être remis le 31 décembre 2025. Pour les nouveaux développements, nous vous recommandons vivement d'utiliser la version 2.x.

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 DynamoDBMapper classe vous permet d'effectuer diverses opérations de création, de lecture, de mise à jour et de suppression (CRUD) sur des éléments, ainsi que d'exécuter des requêtes et des 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 de bas niveau SDK pour Java.

SDKfor Java fournit un ensemble de types d'annotations afin que vous puissiez 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. Ce code définit un ancien objet Java simple (POJO) nomméCatalogItem, qui utilise des annotations pour associer les champs d'objets aux noms d'attributs 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'@DynamoDBAttributeannotation est ajoutée à chaque propriété pour garantir que les noms des propriétés correspondent exactement aux tables créées à l'étape précédente et pour être cohérents avec les noms d'attributs utilisés dans les autres exemples de code de 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 fournit également plusieurs fonctionnalités intégrées, telles que le verrouillage optimiste, ACID les transactions, les valeurs des clés de partition et de tri générées automatiquement, et le versionnement des objets.