Java (AWS SDK v2) での DynamoDB GetItem

GetItem完全なプライマリキーによって単一のアイテムを読み取ります。AWS SDK for Java 2.x では、GetItemRequest を構築して DynamoDbClientgetItem を呼び出します。各キー値は型付きビルダー(文字列には .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 Clientsoftware.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 をダウンロードしてください。

References

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

Console なしで DynamoDB を扱う

DynoTable は DynamoDB 向けの高速なデスクトップクライアントです — テーブルを閲覧し、SQL スタイルのクエリを実行し、アイテムをローカルで編集できます。