Java'da DynamoDB Query (AWS SDK v2)
Query, bir bölüm anahtarını paylaşan her öğeyi okur ve isteğe bağlı olarak sıralama anahtarına göre daraltır. Java 2.x için AWS SDK'da bir keyConditionExpression ile bir QueryRequest oluşturursunuz ve yerleşik queryPaginator, sizin için her sonuç sayfasında LastEvaluatedKey'i takip eder.
Code
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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.QueryRequest;
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;
public class QueryExample {
public static void main(String[] args) {
try (DynamoDbClient ddb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build()) {
Map<String, String> names = new HashMap<>();
names.put("#hashKey", "Artist");
names.put("#rangeKey", "SongTitle");
Map<String, AttributeValue> values = new HashMap<>();
values.put(":hashKeyValue", AttributeValue.builder().s("Arturo Sandoval").build());
values.put(":rangeKeyValue", AttributeValue.builder().s("C").build());
QueryRequest request = QueryRequest.builder()
.tableName("Music")
.keyConditionExpression(
"#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)")
.expressionAttributeNames(names)
.expressionAttributeValues(values)
.build();
List<Map<String, AttributeValue>> items = new ArrayList<>();
for (QueryResponse page : ddb.queryPaginator(request)) {
items.addAll(page.items());
}
System.out.println("Found " + items.size() + " items");
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
}
}
}Açıklama
keyConditionExpression— bölüm anahtarı üzerinde bir eşitlik (#hashKey = :hashKeyValue), artı en fazla bir sıralama anahtarı koşulu (=,<,<=,>,>=,BETWEENveyabegins_with) içermelidir.#hashKey/#rangeKeytakma adlarıexpressionAttributeNamesaracılığıylaArtist/SongTitle'a çözümlenir (ayrılmış sözcük güvenli).expressionAttributeValues—:placeholder→ türlü-AttributeValueeşlemesi.- Sayfalama — bir
Queryen fazla 1 MB döndürür.ddb.queryPaginator(request), sayfalarda ilerledikçe tembel biçimde takip istekleri yayan birQueryIterabledöndürür; herQueryResponsesayfası biritems()listesi taşır. (Elle mi yapıyorsunuz? Boş olana kadarlastEvaluatedKey()'i.exclusiveStartKey(...)olarak geri besleyin.) - Sıralama anahtarı sırasını ters çevirmek için
.scanIndexForward(false)ekleyin (artan varsayılandır). .indexName("...")ekleyerek bir ikincil indeksi sorgulayın.- Düz Java nesnelerini mi tercih edersiniz? DynamoDB Enhanced Client (
software.amazon.awssdk.enhanced.dynamodb), aynı sorguyu açıklamalı bean sınıflarıyla sunar.
Görsel olarak yapın
DynamoDB Expression Builder, anahtar koşulunu bir araya getirir ve çalıştırılabilir kodu kopyalar; böylece yer tutucu ve değer eşlemelerini elle yazmazsınız.
Gerçek tablolara karşı bir grafik arayüzde (GUI) sorgu çalıştırmak için — anahtar-koşul formu, sayfalanmış ızgara, kod olarak kopyalama — DynoTable'ı indirin.
İlgili örnekler
- Go'da DynamoDB Query — Go v2 için AWS SDK ile aynı sorgu.
- Java'da DynamoDB Scan — bir bölüme anahtarla erişemediğinizde.
- Query ve Scan —
Query'nin neden doğru varsayılan olduğu. - Anahtar koşul ifadeleri — her geçerli bölüm/sıralama anahtarı operatörü.
- "Query condition missed key schema element" — anahtar koşulu yanlış özniteliği adlandırıyor veya bölüm anahtarını atlıyor.
- "Query key condition not supported" — anahtar koşulunun kullanamayacağı bir operatör, örneğin contains veya ikinci bir sıralama anahtarı koşulu.
References
- Query — Amazon DynamoDB API Reference
- Use Query with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- QueryRequest — AWS SDK for Java 2.x API Reference
- Querying tables — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.