Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan item: Java
Anda dapat menggunakan AWS SDK for Java Dokumen API untuk melakukan operasi create, read, update, dan delete (CRUD) pada item Amazon DynamoDB dalam tabel.
catatan
The SDK for Java juga menyediakan model persistensi objek, memungkinkan Anda untuk memetakan kelas sisi klien Anda ke tabel DynamoDB. Pendekatan ini dapat mengurangi jumlah kode yang harus Anda tulis. Untuk informasi selengkapnya, lihat Java 1.x: D ynamoDBMapper.
Bagian ini berisi contoh Java untuk melakukan beberapa tindakan API item Java Document dan beberapa contoh kerja lengkap.
Topik
- Menempatkan item
- Mendapatkan item
- Penulisan batch: Menempatkan dan menghapus beberapa item
- Batch get: Mendapatkan beberapa item
- Memperbarui Item
- Menghapus item
- Contoh: CRUD operasi menggunakan AWS SDK for Java dokumen API
- Contoh: Operasi Batch menggunakan AWS SDK for Java dokumen API
- Contoh: Menangani atribut tipe biner menggunakan AWS SDK for Java dokumen API
Menempatkan item
Metode putItem
menyimpan item dalam tabel. Jika item ada, item tersebut akan menggantikan keseluruhan item. Alih-alih mengganti seluruh item, jika Anda hanya ingin memperbarui atribut tertentu, Anda dapat menggunakan metode updateItem
. Untuk informasi selengkapnya, lihat Memperbarui Item.
Menentukan parameter opsional
Selain parameter yang diperlukan, Anda juga dapat menentukan parameter opsional untuk metode putItem
. Misalnya, contoh kode Java berikut menggunakan parameter opsional untuk menentukan kondisi untuk mengunggah item. Jika kondisi yang Anda tentukan tidak terpenuhi, AWS SDK for Java lemparan aConditionalCheckFailedException
. Contoh kode menentukan parameter opsional berikut dalam metode putItem
:
-
ConditionExpression
yang mendefinisikan kondisi permintaan. Kode mendefinisikan kondisi bahwa item yang ada dengan kunci primer yang sama diganti hanya jika memiliki ISBN atribut yang sama dengan nilai tertentu. -
Peta untuk
ExpressionAttributeValues
yang digunakan dalam kondisi tersebut. Dalam hal ini, hanya ada satu substitusi yang diperlukan: Placeholder:val
dalam ekspresi kondisi diganti saat runtime dengan ISBN nilai aktual yang akan diperiksa.
Contoh berikut menambahkan item buku baru menggunakan parameter opsional.
contoh
Item item = new Item() .withPrimaryKey("Id", 104) .withString("Title", "Book 104 Title") .withString("ISBN", "444-4444444444") .withNumber("Price", 20) .withStringSet("Authors", new HashSet<String>(Arrays.asList("Author1", "Author2"))); Map<String, Object> expressionAttributeValues = new HashMap<String, Object>(); expressionAttributeValues.put(":val", "444-4444444444"); PutItemOutcome outcome = table.putItem( item, "ISBN = :val", // ConditionExpression parameter null, // ExpressionAttributeNames parameter - we're not using it for this example expressionAttributeValues);
PutItem dan JSON dokumen
Anda dapat menyimpan JSON dokumen sebagai atribut dalam tabel DynamoDB. Untuk melakukannya, gunakan metode withJSON
Item
. Metode ini mem-parsing JSON dokumen dan memetakan setiap elemen ke tipe data DynamoDB asli.
Misalkan Anda ingin menyimpan JSON dokumen berikut, berisi vendor yang dapat memenuhi pesanan untuk produk tertentu.
contoh
{ "V01": { "Name": "Acme Books", "Offices": [ "Seattle" ] }, "V02": { "Name": "New Publishers, Inc.", "Offices": ["London", "New York" ] }, "V03": { "Name": "Better Buy Books", "Offices": [ "Tokyo", "Los Angeles", "Sydney" ] } }
Anda dapat menggunakan metode withJSON
untuk menyimpan ini dalam tabel ProductCatalog
, dalam atribut Map
yang disebut VendorInfo
. Contoh kode Java berikut mendemonstrasikan cara melakukannya.
// Convert the document into a String. Must escape all double-quotes. String vendorDocument = "{" + " \"V01\": {" + " \"Name\": \"Acme Books\"," + " \"Offices\": [ \"Seattle\" ]" + " }," + " \"V02\": {" + " \"Name\": \"New Publishers, Inc.\"," + " \"Offices\": [ \"London\", \"New York\"" + "]" + "}," + " \"V03\": {" + " \"Name\": \"Better Buy Books\"," + "\"Offices\": [ \"Tokyo\", \"Los Angeles\", \"Sydney\"" + " ]" + " }" + " }"; Item item = new Item() .withPrimaryKey("Id", 210) .withString("Title", "Book 210 Title") .withString("ISBN", "210-2102102102") .withNumber("Price", 30) .withJSON("VendorInfo", vendorDocument); PutItemOutcome outcome = table.putItem(item);
Mendapatkan item
Untuk mengambil satu item, gunakan metode getItem
dari objek Table
. Ikuti langkah-langkah ini:
-
Buat instans dari kelas
DynamoDB
. -
Buat instans dari kelas
Table
untuk mewakili tabel yang ingin Anda gunakan. -
Panggil metode
getItem
dari instansTable
. Anda harus menentukan kunci item primer yang ingin Anda ambil.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya. Kode mendapatkan item yang memiliki kunci partisi yang ditentukan.
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("ProductCatalog"); Item item = table.getItem("Id", 210);
Menentukan parameter opsional
Selain parameter yang diperlukan, Anda juga dapat menentukan parameter opsional untuk metode getItem
. Misalnya, contoh kode Java berikut menggunakan metode opsional untuk mengambil hanya daftar atribut tertentu dan menentukan bacaan sangat konsisten. (Untuk mempelajari selengkapnya tentang konsistensi baca, lihat DynamoDB membaca konsistensi.)
Anda dapat menggunakan ProjectionExpression
untuk mengambil hanya atribut atau elemen tertentu, bukan seluruh item. ProjectionExpression
dapat menentukan tingkat atas atau atribut bersarang menggunakan jalur dokumen. Untuk informasi selengkapnya, lihat Menggunakan ekspresi proyeksi di DynamoDB.
Parameter dari metode getItem
tidak membiarkan Anda menentukan konsistensi baca. Namun, Anda dapat membuat GetItemSpec
, yang menyediakan akses penuh ke semua input ke operasi GetItem
tingkat rendah. Contoh kode berikut membuat GetItemSpec
dan menggunakan spesifikasi tersebut sebagai input untuk metode getItem
.
contoh
GetItemSpec spec = new GetItemSpec() .withPrimaryKey("Id", 206) .withProjectionExpression("Id, Title, RelatedItems[0], Reviews.FiveStar") .withConsistentRead(true); Item item = table.getItem(spec); System.out.println(item.toJSONPretty());
Untuk mencetak Item
dalam format yang dapat dibaca manusia, gunakan metode toJSONPretty
. Output dari contoh sebelumnya terlihat seperti berikut ini.
{ "RelatedItems" : [ 341 ], "Reviews" : { "FiveStar" : [ "Excellent! Can't recommend it highly enough! Buy it!", "Do yourself a favor and buy this" ] }, "Id" : 123, "Title" : "20-Bicycle 123" }
GetItem dan JSON dokumen
Di PutItem dan JSON dokumen bagian ini, Anda menyimpan JSON dokumen dalam Map
atribut bernamaVendorInfo
. Anda dapat menggunakan getItem
metode ini untuk mengambil seluruh dokumen dalam JSON format. Selain itu, Anda dapat menggunakan notasi jalur dokumen untuk mengambil hanya beberapa elemen dalam dokumen. Contoh kode Java berikut mendemonstrasikan teknik ini.
GetItemSpec spec = new GetItemSpec() .withPrimaryKey("Id", 210); System.out.println("All vendor info:"); spec.withProjectionExpression("VendorInfo"); System.out.println(table.getItem(spec).toJSON()); System.out.println("A single vendor:"); spec.withProjectionExpression("VendorInfo.V03"); System.out.println(table.getItem(spec).toJSON()); System.out.println("First office location for this vendor:"); spec.withProjectionExpression("VendorInfo.V03.Offices[0]"); System.out.println(table.getItem(spec).toJSON());
Output dari contoh sebelumnya terlihat seperti berikut ini.
All vendor info: {"VendorInfo":{"V03":{"Name":"Better Buy Books","Offices":["Tokyo","Los Angeles","Sydney"]},"V02":{"Name":"New Publishers, Inc.","Offices":["London","New York"]},"V01":{"Name":"Acme Books","Offices":["Seattle"]}}} A single vendor: {"VendorInfo":{"V03":{"Name":"Better Buy Books","Offices":["Tokyo","Los Angeles","Sydney"]}}} First office location for a single vendor: {"VendorInfo":{"V03":{"Offices":["Tokyo"]}}}
catatan
Anda dapat menggunakan toJSON
metode ini untuk mengonversi item apa pun (atau atributnya) ke string JSON yang diformat. Kode berikut mengambil beberapa atribut tingkat atas dan bersarang dan mencetak hasilnya sebagai. JSON
GetItemSpec spec = new GetItemSpec() .withPrimaryKey("Id", 210) .withProjectionExpression("VendorInfo.V01, Title, Price"); Item item = table.getItem(spec); System.out.println(item.toJSON());
Output-nya akan terlihat seperti berikut.
{"VendorInfo":{"V01":{"Name":"Acme Books","Offices":["Seattle"]}},"Price":30,"Title":"Book 210 Title"}
Penulisan batch: Menempatkan dan menghapus beberapa item
Penulisan batch merujuk pada penempatan dan penghapusan beberapa item dalam satu batch. Metode batchWriteItem
memungkinkan Anda untuk memasukkan dan menghapus beberapa item dari satu atau lebih tabel dalam satu panggilan. Berikut ini adalah langkah-langkah untuk menempatkan atau menghapus beberapa item menggunakan AWS SDK for Java DokumenAPI.
-
Buat instans dari kelas
DynamoDB
. -
Buat instans dari kelas
TableWriteItems
yang menjelaskan semua operasi put dan hapus untuk tabel. Jika Anda ingin menulis ke beberapa tabel dalam satu operasi penulisan batch, Anda harus membuat satu instansTableWriteItems
per tabel. -
Jalankan metode
batchWriteItem
dengan menyediakan objekTableWriteItems
yang Anda buat pada langkah sebelumnya. -
Proses responsnya. Anda harus memeriksa apakah ada item permintaan yang belum diproses yang dikembalikan sebagai respons. Hal ini dapat terjadi jika Anda mencapai kuota throughput yang disediakan atau kesalahan sementara lainnya. Selain itu, DynamoDB membatasi ukuran permintaan dan jumlah operasi yang dapat Anda tentukan dalam permintaan. Jika Anda melebihi batas ini, DynamoDB menolak permintaan tersebut. Untuk informasi selengkapnya, lihat Layanan, akun, dan tabel kuota di Amazon DynamoDB.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya. Contoh tersebut melakukan operasi batchWriteItem
pada dua tabel: Forum
dan Thread
. Objek TableWriteItems
yang sesuai menentukan tindakan berikut:
-
Tempatkan satu item dalam tabel
Forum
. -
Tempatkan dan hapus satu item dalam tabel
Thread
.
Kode kemudian menjalankan batchWriteItem
untuk melakukan operasi.
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); TableWriteItems forumTableWriteItems = new TableWriteItems("Forum") .withItemsToPut( new Item() .withPrimaryKey("Name", "Amazon RDS") .withNumber("Threads", 0)); TableWriteItems threadTableWriteItems = new TableWriteItems("Thread") .withItemsToPut( new Item() .withPrimaryKey("ForumName","Amazon RDS","Subject","Amazon RDS Thread 1") .withHashAndRangeKeysToDelete("ForumName","Some partition key value", "Amazon S3", "Some sort key value"); BatchWriteItemOutcome outcome = dynamoDB.batchWriteItem(forumTableWriteItems, threadTableWriteItems); // Code for checking unprocessed items is omitted in this example
Untuk contoh pekerjaan, lihat Contoh: Operasi penulisan Batch menggunakan AWS SDK for Java dokumen API.
Batch get: Mendapatkan beberapa item
Metode batchGetItem
memungkinkan Anda mengambil beberapa item dari satu atau lebih tabel. Untuk mengambil satu item, Anda dapat menggunakan metode getItem
.
Ikuti langkah-langkah ini:
-
Buat instans dari kelas
DynamoDB
. -
Buat instans dari kelas
TableKeysAndAttributes
yang menjelaskan daftar nilai kunci primer untuk mengambil dari tabel. Jika Anda ingin membaca dari beberapa tabel dalam satu operasi penulisan batch, Anda harus membuat satu instansTableKeysAndAttributes
per tabel. -
Jalankan metode
batchGetItem
dengan menyediakan objekTableKeysAndAttributes
yang Anda buat pada langkah sebelumnya.
Contoh kode Java berikut mendemonstrasikan langkah sebelumnya. Contoh tersebut mengambil dua item dari tabel Forum
dan tiga item dari tabel Thread
.
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); TableKeysAndAttributes forumTableKeysAndAttributes = new TableKeysAndAttributes(forumTableName); forumTableKeysAndAttributes.addHashOnlyPrimaryKeys("Name", "Amazon S3", "Amazon DynamoDB"); TableKeysAndAttributes threadTableKeysAndAttributes = new TableKeysAndAttributes(threadTableName); threadTableKeysAndAttributes.addHashAndRangePrimaryKeys("ForumName", "Subject", "Amazon DynamoDB","DynamoDB Thread 1", "Amazon DynamoDB","DynamoDB Thread 2", "Amazon S3","S3 Thread 1"); BatchGetItemOutcome outcome = dynamoDB.batchGetItem( forumTableKeysAndAttributes, threadTableKeysAndAttributes); for (String tableName : outcome.getTableItems().keySet()) { System.out.println("Items in table " + tableName); List<Item> items = outcome.getTableItems().get(tableName); for (Item item : items) { System.out.println(item); } }
Menentukan parameter opsional
Bersamaan dengan parameter yang diperlukan, Anda juga dapat menentukan parameter opsional saat menggunakan batchGetItem
. Misalnya, Anda dapat memberikan ProjectionExpression
dengan setiap TableKeysAndAttributes
yang Anda tentukan. Hal ini memungkinkan Anda menentukan atribut yang ingin Anda ambil dari tabel.
Contoh kode berikut mengambil dua item dari tabel Forum
. Parameter withProjectionExpression
menentukan bahwa hanya atribut Threads
yang akan diambil.
contoh
TableKeysAndAttributes forumTableKeysAndAttributes = new TableKeysAndAttributes("Forum") .withProjectionExpression("Threads"); forumTableKeysAndAttributes.addHashOnlyPrimaryKeys("Name", "Amazon S3", "Amazon DynamoDB"); BatchGetItemOutcome outcome = dynamoDB.batchGetItem(forumTableKeysAndAttributes);
Memperbarui Item
Metode updateItem
dari objek Table
dapat memperbarui nilai atribut yang ada, menambahkan atribut baru, atau menghapus atribut dari item yang ada.
Metode updateItem
berperilaku sebagai berikut:
-
Jika item tidak ada (tidak ada item dalam tabel dengan kunci primer yang ditentukan),
updateItem
menambahkan item baru ke tabel. -
Jika item ada,
updateItem
melakukan pembaruan seperti yang ditentukan oleh parameterUpdateExpression
.
catatan
Hal ini juga memungkinkan untuk "memperbarui" item menggunakan putItem
. Misalnya, jika Anda memanggil putItem
untuk menambahkan item ke tabel, tetapi sudah ada item dengan kunci primer yang ditentukan, putItem
akan menggantikan seluruh item. Jika ada atribut dalam item yang ada yang tidak ditentukan dalam input, putItem
akan menghapus atribut tersebut dari item.
Secara umum, sebaiknya gunakan updateItem
setiap kali Anda ingin memodifikasi atribut item. Metode updateItem
hanya memodifikasi atribut item yang Anda tentukan dalam input, dan atribut lainnya dalam item tidak berubah.
Ikuti langkah-langkah ini:
-
Buat instans dari kelas
Table
untuk mewakili tabel yang ingin Anda gunakan. -
Panggil metode
updateTable
dari instansTable
. Anda harus menentukan kunci primer dari item yang ingin Anda ambil, bersama denganUpdateExpression
yang menjelaskan atribut untuk memodifikasi dan cara memodifikasinya.
Contoh kode Java berikut menunjukkan tugas sebelumnya. Kode tersebut memperbarui item buku dalam tabel ProductCatalog
. Contoh tersebut menambahkan penulis baru ke set Authors
, dan menghapus atribut ISBN
yang ada. Contoh tersebut juga mengurangi harga sebanyak satu.
Peta ExpressionAttributeValues
digunakan dalam UpdateExpression
. Placeholder :val1
dan :val2
diganti pada saat runtime dengan nilai aktual untuk Authors
dan Price
.
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("ProductCatalog"); Map<String, String> expressionAttributeNames = new HashMap<String, String>(); expressionAttributeNames.put("#A", "Authors"); expressionAttributeNames.put("#P", "Price"); expressionAttributeNames.put("#I", "ISBN"); Map<String, Object> expressionAttributeValues = new HashMap<String, Object>(); expressionAttributeValues.put(":val1", new HashSet<String>(Arrays.asList("Author YY","Author ZZ"))); expressionAttributeValues.put(":val2", 1); //Price UpdateItemOutcome outcome = table.updateItem( "Id", // key attribute name 101, // key attribute value "add #A :val1 set #P = #P - :val2 remove #I", // UpdateExpression expressionAttributeNames, expressionAttributeValues);
Menentukan parameter opsional
Bersamaan dengan parameter yang diperlukan, Anda juga dapat menentukan parameter opsional untuk metode updateItem
, termasuk kondisi yang harus dipenuhi agar pembaruan bisa terjadi. Jika kondisi yang Anda tentukan tidak terpenuhi, AWS SDK for Java lemparan aConditionalCheckFailedException
. Misalnya, contoh kode Java berikut memperbarui harga item buku secara kondisional menjadi 25. Ini menentukan pernyataan ConditionExpression
bahwa harga harus diperbarui hanya jika harga saat ini adalah 20.
contoh
Table table = dynamoDB.getTable("ProductCatalog"); Map<String, String> expressionAttributeNames = new HashMap<String, String>(); expressionAttributeNames.put("#P", "Price"); Map<String, Object> expressionAttributeValues = new HashMap<String, Object>(); expressionAttributeValues.put(":val1", 25); // update Price to 25... expressionAttributeValues.put(":val2", 20); //...but only if existing Price is 20 UpdateItemOutcome outcome = table.updateItem( new PrimaryKey("Id",101), "set #P = :val1", // UpdateExpression "#P = :val2", // ConditionExpression expressionAttributeNames, expressionAttributeValues);
Penghitung atom
Anda dapat menggunakan updateItem
untuk mengimplementasi penghitung atom, di mana Anda menambahkan atau mengurangi nilai atribut yang ada tanpa mengganggu permintaan tulis lainnya. Untuk kenaikan penghitung atom, gunakan UpdateExpression
dengan tindakan set
untuk menambahkan nilai numerik ke atribut jenis Number
yang ada.
Contoh berikut menunjukkan hal ini, menambahkan satu atribut Quantity
. Hal ini juga menunjukkan penggunaan parameter ExpressionAttributeNames
dalam UpdateExpression
.
Table table = dynamoDB.getTable("ProductCatalog"); Map<String,String> expressionAttributeNames = new HashMap<String,String>(); expressionAttributeNames.put("#p", "PageCount"); Map<String,Object> expressionAttributeValues = new HashMap<String,Object>(); expressionAttributeValues.put(":val", 1); UpdateItemOutcome outcome = table.updateItem( "Id", 121, "set #p = #p + :val", expressionAttributeNames, expressionAttributeValues);
Menghapus item
Metode deleteItem
menghapus item dari tabel. Anda harus menyediakan kunci item primer yang ingin Anda hapus.
Ikuti langkah-langkah ini:
-
Buat instans dari klien
DynamoDB
. -
Panggil metode
deleteItem
dengan menyediakan kunci item yang ingin Anda hapus.
Contoh Java berikut menunjukkan tugas ini.
contoh
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("ProductCatalog"); DeleteItemOutcome outcome = table.deleteItem("Id", 101);
Menentukan parameter opsional
Anda dapat menentukan parameter opsional untuk deleteItem
. Misalnya, contoh kode Java berikut menentukan ConditionExpression
, yang menyatakan bahwa item buku dalam ProductCatalog
hanya dapat dihapus jika buku ini tidak lagi dalam publikasi (atribut InPublication
adalah salah).
contoh
Map<String,Object> expressionAttributeValues = new HashMap<String,Object>(); expressionAttributeValues.put(":val", false); DeleteItemOutcome outcome = table.deleteItem("Id",103, "InPublication = :val", null, // ExpressionAttributeNames - not used in this example expressionAttributeValues);