

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

# Hasilkan skema dari anotasi
<a name="ddb-mapper-anno-schema-gen"></a>

****  
**DynamoDB Mapper adalah rilis Pratinjau Pengembang. Ini tidak lengkap fitur dan dapat berubah.**

DynamoDB Mapper bergantung pada skema yang menentukan pemetaan antara class Kotlin dan item DynamoDB. Class Kotlin Anda dapat mendorong pembuatan skema dengan menggunakan plugin Gradle generator skema. 

## Terapkan plugin
<a name="ddb-mapper-anno-schema-gen-plugin"></a>

Untuk memulai skema pembuatan kode untuk kelas Anda, terapkan plugin dalam skrip build aplikasi Anda dan tambahkan dependensi pada modul anotasi. Cuplikan skrip Gradle berikut menunjukkan penyiapan yang diperlukan untuk pembuatan kode. 

(Anda dapat menavigasi ke *X.Y.Z* tautan untuk melihat versi terbaru yang tersedia.)

```
// build.gradle.kts
val sdkVersion: String = [https://github.com/awslabs/aws-sdk-kotlin/releases/latest](https://github.com/awslabs/aws-sdk-kotlin/releases/latest) 

plugins {
    id("aws.sdk.kotlin.hll.dynamodbmapper.schema.generator") version "$sdkVersion-beta" // For the Developer Preview, use the beta version of the latest SDK.
}

dependencies {
    implementation("aws.sdk.kotlin:dynamodb-mapper:$sdkVersion-beta")
    implementation("aws.sdk.kotlin:dynamodb-mapper-annotations:$sdkVersion-beta")
}
```

## Konfigurasikan plugin
<a name="ddb-mapper-anno-schema-gen-conf-plugin"></a>

Plugin ini menawarkan sejumlah opsi konfigurasi yang dapat Anda terapkan dengan menggunakan ekstensi `dynamoDbMapper { ... }` plugin di skrip build Anda: 


| Opsi | Deskripsi opsi | Nilai | 
| --- | --- | --- | 
| generateBuilderClasses |  Mengontrol apakah kelas pembangun gaya DSL akan dibuat untuk kelas yang dianotasi `@DynamoDbItem`  |  `WHEN_REQUIRED`(default): Kelas pembangun tidak akan dibuat untuk kelas yang hanya terdiri dari anggota publik yang dapat berubah dan memiliki konstruktor zero-arg `ALWAYS`: Kelas pembangun akan selalu dihasilkan  | 
| visibility | Mengontrol visibilitas kelas yang dihasilkan |  `PUBLIC` (default) `INTERNAL`  | 
| destinationPackage | Menentukan nama paket untuk kelas yang dihasilkan |  `RELATIVE`(default): Kelas skema akan dihasilkan dalam sub-paket relatif terhadap kelas beranotasi Anda. Secara default, sub-paket diberi nama`dynamodbmapper.generatedschemas`, dan ini dapat dikonfigurasi dengan melewatkan parameter string `ABSOLUTE`: Kelas skema akan dihasilkan dalam paket absolut relatif terhadap root aplikasi Anda. Secara default, paket diberi nama`aws.sdk.kotlin.hll.dynamodbmapper.generatedschemas`, dan ini dapat dikonfigurasi dengan melewatkan parameter string.  | 
| generateGetTableExtension |  Mengontrol apakah metode `DynamoDbMapper.get${CLASS_NAME}Table` ekstensi akan dihasilkan  |  `true` (default) `false`  | 

**Example Contoh konfigurasi plugin pembuatan kode**  
Contoh berikut ini mengonfigurasi paket tujuan dan visibilitas skema yang dihasilkan:  

```
// build.gradle.kts

import aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.DestinationPackage
import aws.sdk.kotlin.hll.dynamodbmapper.codegen.annotations.Visibility
import aws.smithy.kotlin.runtime.ExperimentalApi

@OptIn(ExperimentalApi::class)
dynamoDbMapper {
    destinationPackage = DestinationPackage.RELATIVE("my.configured.package")
    visibility = Visibility.INTERNAL
}
```

## Menganotasi kelas
<a name="ddb-mapper-anno-schema-gen-annotate"></a>

Generator skema mencari anotasi kelas untuk menentukan kelas mana yang akan menghasilkan skema. Untuk ikut serta dalam membuat skema, beri anotasi pada kelas Anda. `@[DynamoDbItem](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-item/index.html)` Anda juga harus membuat anotasi properti kelas yang berfungsi sebagai kunci partisi item dengan anotasi`@[DynamoDbPartitionKey](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-partition-key/index.html)`.

Definisi kelas berikut menunjukkan anotasi minimal yang diperlukan untuk pembuatan skema:

**Example**  

```
@DynamoDbItem
data class Employee(
    @DynamoDbPartitionKey
    val id: Int,
    
    val name: String,
    val role: String,
)
```

### Anotasi kelas
<a name="ddb-mapper-anno-schema-gen-class-annos"></a>

Anotasi berikut diterapkan ke kelas untuk mengontrol pembuatan skema:
+ `@DynamoDbItem`: Menentukan bahwa ini class/interface menggambarkan jenis item dalam tabel. Semua properti publik dari jenis ini akan dipetakan ke atribut kecuali mereka secara eksplisit diabaikan. Saat hadir, skema akan dihasilkan untuk kelas ini.
  + `converterName`: Parameter opsional yang menunjukkan skema khusus harus digunakan daripada yang dibuat oleh plugin generator skema. Ini adalah nama yang sepenuhnya memenuhi syarat dari `ItemConverter` kelas kustom. [Tentukan konverter item khusus](#ddb-mapper-anno-schema-custom)Bagian ini menunjukkan contoh membuat dan menggunakan skema kustom.

### Anotasi properti
<a name="ddb-mapper-anno-schema-gen-prop-annos"></a>

Anda dapat menerapkan anotasi berikut ke properti kelas untuk mengontrol pembuatan skema:
+ `@[https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-item/index.html](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-item/index.html)`: Menentukan kunci partisi untuk item.
+ `@[DynamoDbSortKey](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-sort-key/index.html)`: Menentukan kunci sortir opsional untuk item.
+ `@[DynamoDbIgnore](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-ignore/index.html)`: Menentukan bahwa properti kelas ini tidak harus dikonversi to/from atribut Item oleh DynamoDB Mapper.
+ `@[DynamoDbAttribute](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-attribute/index.html)`: Menentukan nama atribut kustom opsional untuk properti kelas ini.

## Tentukan konverter item khusus
<a name="ddb-mapper-anno-schema-custom"></a>

Dalam beberapa kasus, Anda mungkin ingin menentukan konverter item khusus untuk kelas Anda. Salah satu alasannya adalah jika kelas Anda menggunakan tipe yang tidak didukung oleh plugin generator skema. Kami menggunakan versi `Employee` kelas berikut sebagai contoh:

```
import kotlin.uuid.Uuid

@DynamoDbItem
data class Employee(
    @DynamoDbPartitionKey
    var id: Int,
    
    var name: String,
    var role: String,
    var workstationId: Uuid
)
```

`Employee`Kelas sekarang menggunakan `kotlin.uuid.Uuid` tipe, yang saat ini tidak didukung oleh generator skema. Pembuatan skema gagal dengan kesalahan:`Unsupported attribute type TypeRef(pkg=kotlin.uuid, shortName=Uuid, genericArgs=[], nullable=false)`. Kesalahan ini menunjukkan bahwa plugin tidak dapat menghasilkan konverter item untuk kelas ini. Karena itu, kita perlu menulis sendiri.

Untuk melakukan ini, kami menerapkan `[ItemConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-item-converter/index.html)` untuk kelas, kemudian memodifikasi anotasi `@DynamoDbItem` kelas dengan menentukan nama yang sepenuhnya memenuhi syarat dari konverter item baru.

Pertama, kita menerapkan `[ValueConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.values/-value-converter/index.html)` untuk `kotlin.uuid.Uuid` kelas:

```
import aws.sdk.kotlin.hll.dynamodbmapper.values.ValueConverter
import aws.sdk.kotlin.services.dynamodb.model.AttributeValue
import kotlin.uuid.Uuid

public val UuidValueConverter = object : ValueConverter<Uuid> {
    override fun convertFrom(to: AttributeValue): Uuid = 
        Uuid.parseHex(to.asS())
        
    override fun convertTo(from: Uuid): AttributeValue = 
        AttributeValue.S(from.toHexString())
}
```

Kemudian, kami menerapkan `ItemConverter` untuk `Employee` kelas kami. `ItemConverter`Menggunakan konverter nilai baru ini dalam deskripsi atribut untuk “workstationId”:

```
import aws.sdk.kotlin.hll.dynamodbmapper.items.AttributeDescriptor
import aws.sdk.kotlin.hll.dynamodbmapper.items.ItemConverter
import aws.sdk.kotlin.hll.dynamodbmapper.items.SimpleItemConverter
import aws.sdk.kotlin.hll.dynamodbmapper.values.scalars.IntConverter
import aws.sdk.kotlin.hll.dynamodbmapper.values.scalars.StringConverter

public object MyEmployeeConverter : ItemConverter<Employee> by SimpleItemConverter(
    builderFactory = { Employee() },
    build = { this },
    descriptors = arrayOf(
        AttributeDescriptor(
            "id",
            Employee::id,
            Employee::id::set,
            IntConverter,
        ),
        AttributeDescriptor(
            "name",
            Employee::name,
            Employee::name::set,
            StringConverter,
        ),
        AttributeDescriptor(
            "role",
            Employee::role,
            Employee::role::set,
            StringConverter
        ),
        AttributeDescriptor(
            "workstationId",
            Employee::workstationId,
            Employee::workstationId::set,
            UuidValueConverter
        )
    ),
)
```

Sekarang kita telah mendefinisikan konverter item, kita dapat menerapkannya ke kelas kita. Kami memperbarui `@[DynamoDbItem](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper-annotations/aws.sdk.kotlin.hll.dynamodbmapper/-dynamo-db-item/index.html)` anotasi untuk mereferensikan konverter item dengan memberikan nama kelas yang sepenuhnya memenuhi syarat seperti yang ditunjukkan pada berikut ini:

```
import kotlin.uuid.Uuid

@DynamoDbItem("my.custom.item.converter.MyEmployeeConverter")
data class Employee(
    @DynamoDbPartitionKey
    var id: Int,
    
    var name: String,
    var role: String,
    var workstationId: Uuid
)
```

Akhirnya kita bisa mulai menggunakan kelas dengan DynamoDB Mapper.