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 Client(software.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。
相关示例
- Go 中的 DynamoDB GetItem — 用 AWS SDK for Go v2 完成同样的读取。
- Java 中的 DynamoDB Query — 读取整个分区而非单个项目。
- DynamoDB 分区键的工作原理 — 为什么
GetItem需要完整键。 - DynamoDB ResourceNotFoundException — 这里常见的第一个错误:表名或区域错误。
- "The provided key element does not match the schema" — 你传入的键与表的键模式不匹配。
References
- GetItem — Amazon DynamoDB API Reference
- Use GetItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- GetItemRequest — AWS SDK for Java 2.x API Reference
- Read consistency — Amazon DynamoDB Developer Guide
Last verified 2026-07-13 against the official AWS documentation linked above.