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 :
    • SET assigne des attributs (#upd0 = :updValue0 fixe Genre ; #upd1 = :updValue1 fixe Year). Chaque attribut est aliasé via expressionAttributeNames, donc les mots réservés comme Year sont toujours à l'abri.
    • ADD sur un nombre fait un incrément atomique (ADD #upd2 :updValue2 ajoute 1 à Awards) — sûr en concurrence, sans course lecture-modification-écriture. REMOVE supprime un attribut ; DELETE retire des éléments d'un ensemble.
  • expressionAttributeValues — la map :placeholderAttributeValue typé.
  • returnValues(ReturnValue.ALL_NEW) — renvoie l'élément complet après la mise à jour dans response.attributes() (aussi UPDATED_NEW, ALL_OLD, UPDATED_OLD ou NONE).
  • Sémantique d'upsertUpdateItem crée l'élément si la clé n'existe pas. Ajoute une conditionExpression (par ex. attribute_exists(Artist)) pour une mise à jour seulement.
  • Préfère une expression de mise à jour à la map attributeUpdates hé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

References

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.