DynamoDB GetItem en Java (AWS SDK v2)

GetItem lee un único item por su clave primaria completa. En AWS SDK para Java 2.x construyes un GetItemRequest y llamas a getItem sobre un DynamoDbClient; cada valor de clave es un AttributeValue construido con el builder tipado (.s(...) para strings, .n(...) para números).

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

¿Prefieres objetos Java simples en lugar de mapas de AttributeValue? El DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) mapea los items a clases de bean anotadas por encima de las mismas llamadas de bajo nivel.

Explicación

  • tableName — la tabla de la que se lee.
  • key — debe incluir cada atributo de la clave primaria: solo la clave de partición para una clave simple, o la clave de partición y la de ordenación para una clave compuesta. GetItem no acepta una clave parcial.
  • projectionExpression — opcional; limita qué atributos se devuelven (ahorra ancho de banda, no coste de lectura). Cada atributo proyectado lleva un alias (#proj0#proj3) mediante expressionAttributeNames, lo que mantiene a salvo palabras reservadas como Year.
  • item() — cuando ningún item coincide, la respuesta lleva un mapa vacío (nunca null); comprueba isEmpty() antes de usarlo.
  • Por defecto las lecturas son con consistencia eventual. Añade .consistentRead(true) para una lectura con consistencia fuerte (cuesta 2× la RCU, solo en la tabla base).
  • El cliente es AutoCloseable — el bloque try-with-resources libera sus conexiones HTTP.

Hazlo visualmente

¿Construyendo la proyección o una lectura condicional a mano? Usa el DynamoDB Expression Builder gratuito para montar la expresión y copiar los valores exactos de ProjectionExpression / ExpressionAttributeNames.

Para explorar tablas y ejecutar GetItem en una interfaz gráfica — formulario de clave, cuadrícula de resultados, copia del código generado con un clic — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.