DynamoDB GetItem en Java (AWS SDK v2)

GetItem lit un seul élément par sa clé primaire complète. Dans l'AWS SDK for Java 2.x tu construis un GetItemRequest et appelles getItem sur un DynamoDbClient ; chaque valeur de clé est un AttributeValue construit avec le builder typé (.s(...) pour les chaînes, .n(...) pour les nombres).

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.GetItemRequest;

public class GetItemExample {
    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("#proj0", "Artist");
            names.put("#proj1", "SongTitle");
            names.put("#proj2", "AlbumTitle");
            names.put("#proj3", "Year");

            GetItemRequest request = GetItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .projectionExpression("#proj0, #proj1, #proj2, #proj3")
                    .expressionAttributeNames(names)
                    .build();

            Map<String, AttributeValue> item = ddb.getItem(request).item();
            if (item.isEmpty()) {
                System.out.println("Item not found");
            } else {
                System.out.println(item);
            }
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Tu préfères des objets Java simples aux cartes AttributeValue ? Le DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mappe les éléments vers des classes bean annotées par-dessus les mêmes appels bas niveau.

Explication

  • tableName — la table à lire.
  • key — doit inclure chaque attribut de clé primaire : la clé de partition seule pour une clé simple, ou la clé de partition et la clé de tri pour une clé composite. GetItem n'accepte pas de clé partielle.
  • projectionExpression — optionnel ; limite quels attributs sont renvoyés (économise de la bande passante, pas du coût de lecture). Chaque attribut projeté est aliasé (#proj0#proj3) via expressionAttributeNames, ce qui met à l'abri les mots réservés comme Year.
  • item() — quand aucun élément ne correspond, la réponse porte une carte vide (jamais null) ; vérifie isEmpty() avant de l'utiliser.
  • Par défaut les lectures sont à terme. Ajoute .consistentRead(true) pour une lecture fortement cohérente (coûte 2× le RCU, table de base uniquement).
  • Le client est AutoCloseable — le bloc try-with-resources libère ses connexions HTTP.

À faire visuellement

Tu construis la projection ou une lecture conditionnelle à la main ? Utilise le DynamoDB Expression Builder gratuit pour assembler l'expression et copier les valeurs exactes ProjectionExpression / ExpressionAttributeNames.

Pour parcourir les tables et exécuter GetItem dans une interface graphique — formulaire de clé, grille de résultats, copie en un clic du code généré — 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.