Java (AWS SDK v2) での DynamoDB GetItem
GetItem は完全なプライマリキーによって単一のアイテムを読み取ります。AWS SDK for Java 2.x では、GetItemRequest を構築して DynamoDbClient の getItem を呼び出します。各キー値は型付きビルダー(文字列には .s(...)、数値には .n(...))で構築した AttributeValue です。
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());
}
}
}AttributeValue のマップより素の Java オブジェクトがほしいですか?DynamoDB Enhanced Client(software.amazon.awssdk.enhanced.dynamodb)は、同じ低レベル呼び出しの上でアイテムをアノテーション付き Bean クラスにマッピングします。
Explanation
tableName— 読み取り元のテーブル。key— すべてのプライマリキー属性を含める必要があります。シンプルキーならパーティションキーのみ、複合キーならパーティションキーとソートキーの両方です。GetItemは部分的なキーを受け付けません。projectionExpression— 任意。返される属性を制限します(帯域は節約しますが読み取りコストは減りません)。投影される各属性はexpressionAttributeNamesを介してエイリアス化され(#proj0…#proj3)、Yearのような予約語を安全に扱えます。item()— 一致するアイテムがない場合、レスポンスは空のマップを持ちます(決してnullではありません)。使う前にisEmpty()を確認しましょう。- 読み取りはデフォルトで結果整合性です。強い整合性のある読み取り(RCU 2倍、ベーステーブルのみ)には
.consistentRead(true)を追加します。 - クライアントは
AutoCloseableです。try-with-resources ブロックがその HTTP コネクションを解放します。
Do it visually
投影や条件付き読み取りを手作業で組み立てていますか?無料の DynamoDB Expression Builder を使って式を組み立て、正確な ProjectionExpression / ExpressionAttributeNames の値をコピーしましょう。
テーブルを参照し、GUI で GetItem を実行するには(キーフォーム、結果グリッド、生成コードのワンクリックコピー)、DynoTable をダウンロードしてください。
Related examples
- DynamoDB GetItem in Go — AWS SDK for Go v2 による同じ読み取り。
- DynamoDB Query in Java — 1つのアイテムではなくパーティション全体を読み取る。
- How DynamoDB partition keys work — なぜ
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
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。