在 Java(AWS SDK v2)中使用 DynamoDB GetItem
GetItem 以項目的完整 primary key 讀取單一項目。在 AWS SDK for Java 2.x 中,你建構一個 GetItemRequest 並在 DynamoDbClient 上呼叫 getItem;每個 key 值都是以帶型別的 builder 建立的 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 map?DynamoDB Enhanced Client(software.amazon.awssdk.enhanced.dynamodb)會在相同的低階呼叫之上,把項目對應到帶註解的 bean 類別。
說明
tableName— 要讀取的表格。key— 必須包含每一個 primary-key 屬性:simple key 只需 partition key,composite key 則需 partition 與 sort key。GetItem不接受不完整的 key。projectionExpression— 選用;限制回傳哪些屬性(節省頻寬,而非讀取成本)。每個投影屬性都透過expressionAttributeNames以別名表示(#proj0…#proj3),讓像Year這樣的保留字保持安全。item()— 沒有任何項目符合時,回應帶回一個空 map(絕不會是null);使用前先檢查isEmpty()。- 讀取預設為最終一致。加上
.consistentRead(true)以取得強一致讀取(花費 2× 的 RCU,僅限 base table)。 - client 為
AutoCloseable— try-with-resources 區塊會釋放它的 HTTP 連線。
改用視覺化操作
手動組合投影或條件讀取?使用免費的 DynamoDB Expression Builder 組裝運算式,並複製確切的 ProjectionExpression / ExpressionAttributeNames 值。
想在 GUI 中瀏覽表格並執行 GetItem — key 表單、結果格線、一鍵複製產生的程式碼 — 下載 DynoTable。
相關範例
- 在 Go 中使用 DynamoDB GetItem — 以 AWS SDK for Go v2 執行相同的讀取。
- 在 Java 中使用 DynamoDB Query — 讀取整個 partition,而非單一項目。
- DynamoDB partition key 的運作方式 — 為什麼
GetItem需要完整的 key。 - DynamoDB ResourceNotFoundException — 這裡常見的第一個錯誤:表格名稱或 region 錯誤。
- "The provided key element does not match the schema" — 你傳入的 key 與表格的 key 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
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。