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()birStringalır —AttributeValue.builder().n(1994)derlenmez. Javadoc nedenini verir: "Numbers are sent across the network to DynamoDB as strings, to maximize compatibility across languages and libraries." Yanin("1994")olur ve geri dönüşte ayrıştırma sizin işinizdir.item()aslanulldöndürmez — bir ıskalama boş bir harita verir, dolayısıyla sınamaisEmpty()'dir. "Hizmet hiçbir şey döndürmedi" ile "hizmet boş bir harita döndürdü" arasını ayırmak içinhasItem()çağırın; SDK boş koleksiyonları kendiliğinden oluşturur ve bunun ötesini gören tek şeyhasItem()'dır.- Geri verdiği harita değişmezdir — Javadoc, onu değiştirmenin
UnsupportedOperationExceptionfırlattığını açıkça belirtir. Düzenlemeyi planlıyorsanız önce birHashMap'e kopyalayın. - Takma ad haritasını yerel olarak hiçbir şey doğrulamaz —
expressionAttributeNamesdüz birMap<String, String>'tir.Yearbir ayrılmış sözcük olduğu için#proj3burada 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
mainiç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.AttributeValueharitaları 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
- Go ile DynamoDB GetItem — aynı okuma, AWS SDK for Go v2 ile.
- Java ile DynamoDB Query — tek bir öğe yerine bütün bir bölümü okuyun.
- DynamoDB bölüm anahtarları nasıl çalışır —
GetItem'ın neden tam anahtara ihtiyaç duyduğu. - DynamoDB ResourceNotFoundException — buradaki her zamanki ilk hata: yanlış tablo adı ya da Bölge.
- "The provided key element does not match the schema" — geçirdiğiniz anahtar tablonun anahtar şemasıyla eşleşmiyor.
Kaynaklar
- 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
- Use singleton service client instances with the AWS SDK for Java 2.x
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.