Java (AWS SDK v2) ile DynamoDB GetItem

AWS SDK for Java 2.x, bir öğeyi değişmez oluşturucular üzerinden kurulan bir Map<String, AttributeValue> olarak modeller. Kurallarından ikisi diğer SDK'ların çoğundan farklıdır: sayılar dize olarak türlenir ve yanıt koleksiyonları asla null olmaz.

İsteğin kendisi, her yerdeki gibi tam birincil anahtara ihtiyaç duyar.

Kod

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

Açıklama

  • n() bir String alırAttributeValue.builder().n(1994) derlenmez. Javadoc nedenini verir: "Numbers are sent across the network to DynamoDB as strings, to maximize compatibility across languages and libraries." Yani n("1994") olur ve geri dönüşte ayrıştırma sizin işinizdir.
  • item() asla null döndürmez — bir ıskalama boş bir harita verir, dolayısıyla sınama isEmpty()'dir. "Hizmet hiçbir şey döndürmedi" ile "hizmet boş bir harita döndürdü" arasını ayırmak için hasItem() çağırın; SDK boş koleksiyonları kendiliğinden oluşturur ve bunun ötesini gören tek şey hasItem()'dır.
  • Geri verdiği harita değişmezdir — Javadoc, onu değiştirmenin UnsupportedOperationException fırlattığını açıkça belirtir. Düzenlemeyi planlıyorsanız önce bir HashMap'e kopyalayın.
  • Takma ad haritasını yerel olarak hiçbir şey doğrulamazexpressionAttributeNames düz bir Map<String, String>'tir. Year bir ayrılmış sözcük olduğu için #proj3 burada zorunludur ve bildirdiğiniz ama hiç başvurmadığınız bir takma ad kendi başına hizmet tarafı bir hatadır: "Value provided in ExpressionAttributeNames unused in expressions".
  • Tüm uygulama için tek istemci — AWS bunu açıkça söyler: "Service clients in the AWS SDK for Java 2.x are thread-safe." try-with-resources bloğu tek seferlik bir main için uygundur; uzun ömürlü bir hizmette istemciyi başlangıçta oluşturun ve istek başına asla kapatmayın.
  • .consistentRead(true), okuma maliyetini ikiye katlar ve bir GSI üzerinde reddedilir. AttributeValue haritaları size dar gelmeye başlarsa, DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) öğeleri bu aynı düşük düzeyli çağrılar üzerinden açıklama içeren bean'lere eşler.

Görsel olarak yapın

Bu okumanın 0,5 mi yoksa 1 kapasite birimi mi faturalandıracağı, öğenin 4 KB'a sığıp sığmadığına iner. Öğe boyutu hesaplayıcısı yapıştırılmış bir öğeyi o sınıra karşı ölçer.

DynoTable aynı öğeleri sıradan satırlar olarak gösterir ve ızgaranın arkasındaki sorguyu bu oluşturuculardan kurulmuş bir Java programı olarak dışa aktarır. DynoTable'ı indirin.

İlgili örnekler

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.