DynamoDB UpdateItem di Java (AWS SDK v2)

UpdateItem mengubah atribut tertentu dari satu item (dan membuat item jika belum ada), membiarkan segala hal lain tidak tersentuh. Di AWS SDK for Java 2.x Anda membangun UpdateItemRequest dengan updateExpression.

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

Penjelasan

  • key — primary key lengkap dari item yang diperbarui.
  • updateExpression — satu atau lebih klausa:
    • SET menetapkan atribut (#upd0 = :updValue0 men-set Genre; #upd1 = :updValue1 men-set Year). Setiap atribut diberi alias via expressionAttributeNames, jadi reserved word seperti Year selalu aman.
    • ADD pada angka melakukan increment atomik (ADD #upd2 :updValue2 menambah 1 ke Awards) — aman di bawah konkurensi, tanpa race read-modify-write. REMOVE menghapus sebuah atribut; DELETE menghapus elemen dari sebuah set.
  • expressionAttributeValues — map :placeholder → typed-AttributeValue.
  • returnValues(ReturnValue.ALL_NEW) — mengembalikan item lengkap setelah pembaruan di response.attributes() (juga UPDATED_NEW, ALL_OLD, UPDATED_OLD, atau NONE).
  • Semantik upsertUpdateItem membuat item jika key tidak ada. Tambahkan conditionExpression (mis. attribute_exists(Artist)) untuk update-only.
  • Lebih suka update expression daripada map attributeUpdates legacy — expression mendukung banyak klausa, alias, dan kondisi dalam satu request.

Lakukan secara visual

DynamoDB Expression Builder membangun klausa SET / ADD / REMOVE dengan map name/value dan menyalin kode yang bisa dijalankan.

Untuk mengedit item di GUI — ubah sebuah field, tinjau UpdateExpression yang dihasilkan, salin kodenya — unduh DynoTable.

Contoh terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.