

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

# Tentukan skema secara manual
<a name="ddb-mapper-code-schemas"></a>

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

## Tentukan skema dalam kode
<a name="ddb-mapper-gs-manual-schema-def"></a>

Untuk kontrol dan penyesuaian maksimum, Anda dapat secara manual menentukan dan menyesuaikan skema dalam kode. 

Seperti yang ditunjukkan dalam cuplikan berikut, Anda perlu menyertakan lebih sedikit dependensi dalam `build.gradle.kts` file Anda dibandingkan dengan menggunakan pembuatan skema berbasis anotasi. 

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

dependencies {
    implementation("aws.sdk.kotlin:dynamodb-mapper:$sdkVersion-beta") // For the Developer Preview, use the beta version of the latest SDK.
}
```

Perhatikan bahwa Anda tidak memerlukan plugin generator skema atau paket anotasi.

Pemetaan antara kelas Kotlin dan item DynamoDB memerlukan `[ItemSchema<T>](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-item-schema/index.html)` implementasi, di mana `T` jenis kelas Kotlin. Skema terdiri dari elemen-elemen berikut:
+ Konverter item, yang menentukan cara mengonversi antara instance objek Kotlin dan item DynamoDB.
+ Sebuah spesifikasi kunci partisi, yang mendefinisikan nama dan jenis atribut kunci partisi.
+ Secara opsional, spesifikasi kunci sortir, yang mendefinisikan nama dan jenis atribut kunci sortir.

Dalam kode berikut kita secara manual membuat sebuah `CarSchema` instance:

```
import aws.sdk.kotlin.hll.dynamodbmapper.items.ItemConverter
import aws.sdk.kotlin.hll.dynamodbmapper.items.ItemSchema
import aws.sdk.kotlin.hll.dynamodbmapper.model.itemOf

// We define a schema for this data class.
data class Car(val make: String, val model: String, val initialYear: Int)

// First, define an item converter.
val carConverter = object : ItemConverter<Car> {
    override fun convertTo(from: Car, onlyAttributes: Set<String>?): Item  = itemOf(
        "make" to AttributeValue.S(from.make),
        "model" to AttributeValue.S(from.model),
        "initialYear" to AttributeValue.N(from.initialYear.toString()),
    )

    override fun convertFrom(to: Item): Car = Car(
        make = to["make"]?.asSOrNull() ?: error("Invalid attribute `make`"),
        model = to["model"]?.asSOrNull() ?: error("Invalid attribute `model`"),
        initialYear = to["initialYear"]?.asNOrNull()?.toIntOrNull()
            ?: error("Invalid attribute `initialYear`"),
    )
}

// Next, define the specifications for the partition key and sort key.
val makeKey = KeySpec.String("make")
val modelKey = KeySpec.String("model")

// Finally, create the schema from the converter and key specifications.
// Note that the KeySpec for the partition key comes first in the ItemSchema constructor.
val CarSchema = ItemSchema(carConverter, makeKey, modelKey)
```

Kode sebelumnya membuat konverter bernama`carConverter`, yang didefinisikan sebagai implementasi anonim dari`ItemConverter<Car>`. `convertTo`Metode konverter menerima `Car` argumen dan mengembalikan `Item` instance yang mewakili kunci literal dan nilai atribut item DynamoDB. `convertFrom`Metode konverter menerima `Item` argumen dan mengembalikan `Car` instance dari nilai atribut `Item` argumen.

Selanjutnya kode membuat dua spesifikasi utama: satu untuk kunci partisi dan satu untuk kunci sortir. Setiap tabel atau indeks DynamoDB harus memiliki persis satu kunci partisi dan, dengan demikian, demikian juga setiap definisi skema DynamoDB Mapper. Skema mungkin juga memiliki satu kunci pengurutan.

Dalam pernyataan terakhir, kode membuat skema untuk tabel `cars` DynamoDB dari konverter dan spesifikasi utama.

Skema yang dihasilkan setara dengan skema berbasis anotasi yang kami hasilkan di bagian tersebut. [Tentukan skema dengan anotasi kelas](ddb-mapper-get-started.md#ddb-mapper-gs-anno-schema-def) Untuk referensi, berikut ini adalah kelas beranotasi yang kami gunakan:

### Kelas mobil dengan anotasi DynamoDB Mapper
<a name="ejd_mxz_ddc"></a>

```
@DynamoDbItem
data class Car(
    @DynamoDbPartitionKey
    val make: String,
    
    @DynamoDbSortKey
    val model: String,
    
    val initialYear: Int
)
```

Selain mengimplementasikan milik Anda sendiri`ItemConverter`, DynamoDB Mapper menyertakan beberapa implementasi bermanfaat seperti: 
+ `[SimpleItemConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-simple-item-converter/index.html)`: menyediakan logika konversi sederhana dengan menggunakan kelas pembangun dan deskripsi atribut. Lihat contoh di [Tentukan konverter item khusus](ddb-mapper-anno-schema-gen.md#ddb-mapper-anno-schema-custom) untuk bagaimana Anda dapat menggunakan implementasi ini.
+ `[HeterogeneousItemConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-heterogeneous-item-converter/index.html)`: menyediakan logika konversi tipe polimorfik dengan menggunakan atribut diskriminator dan mendelegasikan `ItemConverter` instance untuk subtipe.
+ `[DocumentConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-document-converter/index.html)`: menyediakan logika konversi untuk data tidak terstruktur dalam [https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.content/-document.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.content/-document.html)objek.