DynamoDB GetItem in Java (AWS SDK v2)

GetItem liest ein einzelnes Item über seinen vollständigen Primärschlüssel. Im AWS SDK for Java 2.x baust du einen GetItemRequest und rufst getItem auf einem DynamoDbClient auf; jeder Schlüsselwert ist ein AttributeValue, gebaut mit dem typisierten Builder (.s(...) für Strings, .n(...) für Zahlen).

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());
        }
    }
}

Lieber schlichte Java-Objekte statt AttributeValue-Maps? Der DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mappt Items auf annotierte Bean-Klassen aufbauend auf denselben Low-Level-Aufrufen.

Erklärung

  • tableName — die Tabelle, aus der gelesen wird.
  • key — muss jedes Primärschlüssel-Attribut enthalten: den Partitionsschlüssel allein bei einem einfachen Schlüssel oder Partitions- und Sortierschlüssel bei einem zusammengesetzten Schlüssel. GetItem akzeptiert keinen unvollständigen Schlüssel.
  • projectionExpression — optional; begrenzt, welche Attribute zurückkommen (spart Bandbreite, nicht Read-Kosten). Jedes projizierte Attribut wird per expressionAttributeNames aliasiert (#proj0#proj3), was reservierte Wörter wie Year absichert.
  • item() — wenn kein Item passt, trägt die Antwort eine leere Map (niemals null); prüfe isEmpty(), bevor du sie verwendest.
  • Standardmäßig sind Reads letztendlich konsistent. Füge .consistentRead(true) für einen stark konsistenten Read hinzu (kostet 2× die RCU, nur Basistabelle).
  • Der Client ist AutoCloseable — der try-with-resources-Block gibt seine HTTP-Verbindungen frei.

Visuell erledigen

Die Projektion oder einen bedingten Read von Hand bauen? Nutze den kostenlosen DynamoDB Expression Builder, um die Expression zusammenzustellen und die exakten ProjectionExpression / ExpressionAttributeNames-Werte zu kopieren.

Um Tabellen in einer GUI zu durchsuchen und GetItem auszuführen — Schlüsselformular, Ergebnisraster, Ein-Klick-Kopie des generierten Codes — lade DynoTable herunter.

Verwandte Beispiele

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.