UpdateItem DynamoDB en Java (AWS SDK v2)
UpdateItem modifie des attributs spécifiques d'un élément (et crée l'élément s'il n'existe pas), en laissant tout le reste intact. Dans AWS SDK pour Java 2.x, tu construis un UpdateItemRequest avec une updateExpression.
Code
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;
public class UpdateItemExample {
public static void main(String[] args) {
try (DynamoDbClient ddb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build()) {
Map<String, AttributeValue> key = new HashMap<>();
key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());
Map<String, String> names = new HashMap<>();
names.put("#upd0", "Genre");
names.put("#upd1", "Year");
names.put("#upd2", "Awards");
Map<String, AttributeValue> values = new HashMap<>();
values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
values.put(":updValue1", AttributeValue.builder().n("1994").build());
values.put(":updValue2", AttributeValue.builder().n("1").build());
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Music")
.key(key)
.updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
.expressionAttributeNames(names)
.expressionAttributeValues(values)
.returnValues(ReturnValue.ALL_NEW)
.build();
UpdateItemResponse response = ddb.updateItem(request);
System.out.println(response.attributes()); // the item after the update
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
}
}
}Explication
key— la clé primaire complète de l'élément à mettre à jour.updateExpression— une ou plusieurs clauses :SETassigne des attributs (#upd0 = :updValue0fixeGenre;#upd1 = :updValue1fixeYear). Chaque attribut est aliasé viaexpressionAttributeNames, donc les mots réservés commeYearsont toujours à l'abri.ADDsur un nombre fait un incrément atomique (ADD #upd2 :updValue2ajoute 1 àAwards) — sûr en concurrence, sans course lecture-modification-écriture.REMOVEsupprime un attribut ;DELETEretire des éléments d'un ensemble.
expressionAttributeValues— la map:placeholder→AttributeValuetypé.returnValues(ReturnValue.ALL_NEW)— renvoie l'élément complet après la mise à jour dansresponse.attributes()(aussiUPDATED_NEW,ALL_OLD,UPDATED_OLDouNONE).- Sémantique d'upsert —
UpdateItemcrée l'élément si la clé n'existe pas. Ajoute uneconditionExpression(par ex.attribute_exists(Artist)) pour une mise à jour seulement. - Préfère une expression de mise à jour à la map
attributeUpdateshéritée — les expressions supportent plusieurs clauses, alias et conditions en une seule requête.
À faire visuellement
Le DynamoDB Expression Builder construit les clauses SET / ADD / REMOVE avec les maps de noms/valeurs et copie du code exécutable.
Pour éditer des éléments dans une interface graphique — changer un champ, examiner l'UpdateExpression générée, copier le code — télécharge DynoTable.
Exemples liés
- UpdateItem DynamoDB en Go — la même mise à jour avec AWS SDK pour Go v2.
- PutItem DynamoDB en Java — remplacer l'élément entier à la place.
- Expressions de mise à jour DynamoDB —
SET,ADD,REMOVE,DELETEet les idiomes. - Comprendre ReturnValues — ce que chaque option
ReturnValueste donne. - "Attribute name is a reserved keyword" — pourquoi la map d'alias ici n'est pas optionnelle.
- "Invalid UpdateExpression" syntax errors — les erreurs de syntaxe SET/ADD courantes, décodées.
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- UpdateItemRequest — AWS SDK for Java 2.x API Reference
- Update expressions — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.