Java(AWS SDK v2)中的 DynamoDB GetItem

GetItem完整主键读取单个项目。在 AWS SDK for Java 2.x 中,你构建一个 GetItemRequest 并在 DynamoDbClient 上调用 getItem;每个键值都是用带类型的构建器构建的 AttributeValue(字符串用 .s(...),数字用 .n(...))。

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

更想用普通 Java 对象而非 AttributeValue 映射?DynamoDB Enhanced Clientsoftware.amazon.awssdk.enhanced.dynamodb)会在同样的低级调用之上,把项目映射到带注解的 bean 类。

说明

  • tableName — 要读取的表。
  • key — 必须包含每个主键属性:简单键仅需分区键,复合键则需分区键排序键。GetItem 不接受部分键。
  • projectionExpression — 可选;限制返回哪些属性(节省带宽,而非读取成本)。每个被投影的属性都通过 expressionAttributeNames 做了别名(#proj0#proj3),这能让像 Year 这样的保留字保持安全。
  • item() — 没有项目匹配时,响应携带一个空映射(绝不会是 null);使用前检查 isEmpty()
  • 默认情况下读取是最终一致性的。加上 .consistentRead(true) 可进行强一致性读取(费用为 2× RCU,仅限基表)。
  • 该客户端实现了 AutoCloseable——try-with-resources 块会释放它的 HTTP 连接。

可视化操作

手工构建投影或条件读取?使用免费的 DynamoDB Expression Builder 组装表达式,并复制精确的 ProjectionExpression / ExpressionAttributeNames 值。

想在 GUI 中浏览表并运行 GetItem——键表单、结果网格、一键复制生成的代码——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。