Java'da DynamoDB UpdateItem (AWS SDK v2)

UpdateItem, bir öğenin belirli özniteliklerini değiştirir (ve öğe yoksa onu oluşturur), geri kalan her şeye dokunmadan bırakır. Java 2.x için AWS SDK'da bir updateExpression ile bir UpdateItemRequest oluşturursunuz.

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.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;

public class UpdateItemExample {
    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("#upd0", "Genre");
            names.put("#upd1", "Year");
            names.put("#upd2", "Awards");

            Map<String, AttributeValue> values = new HashMap<>();
            values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
            values.put(":updValue1", AttributeValue.builder().n("1994").build());
            values.put(":updValue2", AttributeValue.builder().n("1").build());

            UpdateItemRequest request = UpdateItemRequest.builder()
                    .tableName("Music")
                    .key(key)
                    .updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
                    .expressionAttributeNames(names)
                    .expressionAttributeValues(values)
                    .returnValues(ReturnValue.ALL_NEW)
                    .build();

            UpdateItemResponse response = ddb.updateItem(request);
            System.out.println(response.attributes()); // the item after the update
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Açıklama

  • key — güncellenecek öğenin tam birincil anahtarı.
  • updateExpression — bir veya daha fazla yan tümce:
    • SET öznitelikleri atar (#upd0 = :updValue0, Genre'yi ayarlar; #upd1 = :updValue1, Year'ı ayarlar). Her öznitelik expressionAttributeNames aracılığıyla bir takma ad alır, böylece Year gibi ayrılmış sözcükler her zaman güvenlidir.
    • Bir sayı üzerinde ADD, atomik bir artış yapar (ADD #upd2 :updValue2, Awards'a 1 ekler) — eşzamanlılık altında güvenli, oku-değiştir-yaz yarışı yok. REMOVE bir özniteliği siler; DELETE bir kümeden öğeleri kaldırır.
  • expressionAttributeValues:placeholder → türlü-AttributeValue eşlemesi.
  • returnValues(ReturnValue.ALL_NEW) — güncellemeden sonra öğenin tamamını response.attributes() içinde döndürür (ayrıca UPDATED_NEW, ALL_OLD, UPDATED_OLD veya NONE).
  • Upsert anlamları — anahtar yoksa UpdateItem öğeyi oluşturur. Yalnızca-güncelleme için bir conditionExpression (örneğin attribute_exists(Artist)) ekleyin.
  • Eski attributeUpdates eşlemesi yerine bir güncelleme ifadesini tercih edin — ifadeler tek bir istekte birden çok yan tümceyi, takma adları ve koşulları destekler.

Görsel olarak yapın

DynamoDB Expression Builder, SET / ADD / REMOVE yan tümcelerini ad/değer eşlemeleriyle oluşturur ve çalıştırılabilir kodu kopyalar.

Öğeleri bir grafik arayüzde (GUI) düzenlemek için — bir alanı değiştirin, üretilen UpdateExpression'ı gözden geçirin, kodu kopyalayın — DynoTable'ı indirin.

İlgili örnekler

References

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

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.