Gunakan ekspresi dan kondisi - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan ekspresi dan kondisi

Ekspresi dalam DynamoDB Enhanced Client API adalah representasi Java dari ekspresi DynamoDB.

DynamoDB Enhanced Client API menggunakan tiga jenis ekspresi:

Ekspresi

ExpressionKelas digunakan ketika Anda menentukan kondisi dan filter.

QueryConditional

Jenis ekspresi ini merupakan kondisi utama untuk operasi kueri.

UpdateExpression

Kelas ini membantu Anda menulis ekspresi pembaruan DynamoDB dan saat ini digunakan dalam kerangka ekstensi saat Anda memperbarui item.

Anatomi ekspresi

Ekspresi terdiri dari yang berikut:

  • Ekspresi string (wajib). String berisi ekspresi logika DynamoDB dengan nama placeholder untuk nama atribut dan nilai atribut.

  • Peta nilai ekspresi (biasanya diperlukan).

  • Peta nama ekspresi (opsional).

Gunakan pembangun untuk menghasilkan Expression objek yang mengambil bentuk umum berikut.

Expression expression = Expression.builder() .expression(<String>) .expressionNames(<Map>) .expressionValues(<Map>) .build()

ExpressionS biasanya membutuhkan peta nilai ekspresi. Peta memberikan nilai untuk placeholder dalam ekspresi string. Kunci peta terdiri dari nama placeholder yang didahului dengan titik dua (:) dan nilai peta adalah instance dari. AttributeValue AttributeValuesKelas memiliki metode kenyamanan untuk menghasilkan AttributeValue instance dari literal. Atau, Anda dapat menggunakan AttributeValue.Builder untuk menghasilkan AttributeValue instance.

Cuplikan berikut menunjukkan peta dengan dua entri setelah baris komentar 2. String diteruskan ke expression() metode, ditampilkan setelah baris komentar 1, berisi placeholder yang DynamoDB menyelesaikan sebelum melakukan operasi. Cuplikan ini tidak berisi peta nama ekspresi, karena harga adalah nama atribut yang diizinkan.

public static void scanAsync(DynamoDbAsyncTable productCatalog) { ScanEnhancedRequest request = ScanEnhancedRequest.builder() .consistentRead(true) .attributesToProject("id", "title", "authors", "price") .filterExpression(Expression.builder() // 1. :min_value and :max_value are placeholders for the values provided by the map .expression("price >= :min_value AND price <= :max_value") // 2. Two values are needed for the expression and each is supplied as a map entry. .expressionValues( Map.of( ":min_value", numberValue(8.00), ":max_value", numberValue(400_000.00))) .build()) .build();

Jika nama atribut dalam tabel DynamoDB adalah kata cadangan, dimulai dengan angka, atau berisi spasi, peta nama ekspresi diperlukan untuk. Expression

Misalnya, jika nama atribut 1price bukan price dalam contoh kode sebelumnya, contoh akan perlu dimodifikasi seperti yang ditunjukkan pada contoh berikut.

ScanEnhancedRequest request = ScanEnhancedRequest.builder() .filterExpression(Expression.builder() .expression("#price >= :min_value AND #price <= :max_value") .expressionNames( Map.of("#price", "1price") ) .expressionValues( Map.of(":min_value", numberValue(8.00), ":max_value", numberValue(400_000.00))) .build()) .build();

Sebuah placeholder untuk nama ekspresi dimulai dengan tanda pound ()#. Entri untuk peta nama ekspresi menggunakan placeholder sebagai kunci dan nama atribut sebagai nilai. Peta ditambahkan ke pembuat ekspresi dengan expressionNames() metode. DynamoDB menyelesaikan nama atribut sebelum melakukan operasi.

Nilai ekspresi tidak diperlukan jika fungsi digunakan dalam ekspresi string. Contoh fungsi ekspresi adalahattribute_exists(<attribute_name>).

Contoh berikut membangun sebuah Expression yang menggunakan fungsi DynamoDB. String ekspresi dalam contoh ini tidak menggunakan placeholder. Ekspresi ini dapat digunakan pada putItem operasi untuk memeriksa apakah item sudah ada dalam database dengan nilai movie atribut sama dengan movie atribut objek data.

Expression exp = Expression.builder().expression("attribute_not_exists (movie)").build();

Panduan Pengembang DynamoDB berisi informasi lengkap tentang ekspresi tingkat rendah yang digunakan dengan DynamoDB.

Ekspresi kondisi dan kondisional

Ketika Anda menggunakanputItem(),updateItem(), dan deleteItem() metode, dan juga ketika Anda menggunakan transaksi dan operasi batch, Anda menggunakan Expression objek untuk menentukan kondisi yang DynamoDB harus memenuhi untuk melanjutkan operasi. Ekspresi ini diberi nama ekspresi kondisi. Sebagai contoh, lihat ekspresi kondisi yang digunakan dalam addDeleteItem() metode (setelah baris komentar 1) dari contoh transaksi yang ditunjukkan dalam panduan ini.

Ketika Anda bekerja dengan query() metode, suatu kondisi dinyatakan sebagai a QueryConditional. QueryConditionalKelas memiliki beberapa metode kenyamanan statis yang membantu Anda menulis kriteria yang menentukan item mana yang akan dibaca dari DynamoDB.

Sebagai contohQueryConditionals, lihat contoh kode pertama dari Querycontoh metode bagian panduan ini.

Ekspresi Filter

Ekspresi filter digunakan dalam operasi pemindaian dan kueri untuk memfilter item yang dikembalikan.

Ekspresi filter diterapkan setelah semua data dibaca dari database, sehingga biaya baca sama seperti jika tidak ada filter. Panduan Pengembang Amazon DynamoDB memiliki informasi lebih lanjut tentang penggunaan ekspresi filter untuk operasi kueri dan pemindaian.

Contoh berikut menunjukkan ekspresi filter ditambahkan ke permintaan scan. Kriteria membatasi barang yang dikembalikan ke barang dengan harga antara 8.00 dan 80,00 inklusif.

Map<String, AttributeValue> expressionValues = Map.of( ":min_value", numberValue(8.00), ":max_value", numberValue(80.00)); ScanEnhancedRequest request = ScanEnhancedRequest.builder() .consistentRead(true) // 1. the 'attributesToProject()' method allows you to specify which values you want returned. .attributesToProject("id", "title", "authors", "price") // 2. Filter expression limits the items returned that match the provided criteria. .filterExpression(Expression.builder() .expression("price >= :min_value AND price <= :max_value") .expressionValues(expressionValues) .build()) .build();

Perbarui ekspresi

Metode DynamoDB Enhanced Client updateItem() menyediakan cara standar untuk memperbarui item di DynamoDB. Namun, ketika Anda memerlukan lebih banyak fungsionalitas, UpdateExpressionsberikan representasi type-safe dari sintaks ekspresi pembaruan DynamoDB. Misalnya, Anda dapat menggunakan UpdateExpressions untuk meningkatkan nilai tanpa terlebih dahulu membaca item dari DynamoDB, atau menambahkan anggota individu ke daftar. Ekspresi pembaruan saat ini tersedia di ekstensi khusus untuk updateItem() metode ini.

Untuk contoh yang menggunakan ekspresi pembaruan, lihat contoh ekstensi kustom dalam panduan ini.

Informasi selengkapnya tentang ekspresi pembaruan tersedia di Panduan Pengembang Amazon DynamoDB.