

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# スキーマを手動で定義する
<a name="ddb-mapper-code-schemas"></a>

****  
**DynamoDB Mapper はデベロッパープレビューリリースです。機能は完了しておらず、変更される可能性があります。**

## コードでスキーマを定義する
<a name="ddb-mapper-gs-manual-schema-def"></a>

最大限の制御とカスタマイズを実現するために、コードでスキーマを手動で定義およびカスタマイズできます。

次のスニペットに示すように、注釈駆動型スキーマ作成を使用する場合と比較して、`build.gradle.kts`ファイルに含める依存関係の数を減らす必要があります。

({{X.Y.Z}} リンクに移動して、利用可能な最新バージョンを確認できます）。

```
// 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.
}
```

スキーマジェネレータープラグインや注釈パッケージは必要ありません。

Kotlin クラスと DynamoDB 項目間のマッピングには`[ItemSchema<T>](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-item-schema/index.html)`実装が必要です。ここで、 `T`は Kotlin クラスのタイプです。スキーマは以下の要素で構成されます。
+ Kotlin オブジェクトインスタンスと DynamoDB 項目間の変換方法を定義する項目コンバータ。
+ パーティションキー属性の名前とタイプを定義するパーティションキー仕様。
+ オプションで、ソートキー属性の名前とタイプを定義するソートキー仕様。

次のコードでは、`CarSchema`インスタンスを手動で作成します。

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

前のコードでは、 という名前のコンバーターを作成します。これは`carConverter`、 の匿名実装として定義されます`ItemConverter<Car>`。コンバータの `convertTo`メソッドは引`Car`数を受け入れ、DynamoDB 項目属性のリテラルキーと値を表す`Item`インスタンスを返します。コンバータの `convertFrom`メソッドは引`Item`数を受け入れ、`Item`引数の属性値から`Car`インスタンスを返します。

次に、コードは 2 つのキー仕様を作成します。1 つはパーティションキー用、もう 1 つはソートキー用です。すべての DynamoDB テーブルまたはインデックスには、パーティションキーが 1 つだけ必要です。それに応じて、すべての DynamoDB Mapper スキーマ定義が必要です。スキーマにはソートキーが 1 つある場合もあります。

最後のステートメントでは、コードはコンバータとキーの仕様から `cars` DynamoDB テーブルのスキーマを作成します。

結果のスキーマは、 [クラス注釈を使用してスキーマを定義する](ddb-mapper-get-started.md#ddb-mapper-gs-anno-schema-def)セクションで生成した注釈駆動型スキーマと同等です。参考までに、使用した注釈付きクラスを次に示します。

### DynamoDB Mapper 注釈付きの車両クラス
<a name="ejd_mxz_ddc"></a>

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

DynamoDB Mapper には`ItemConverter`、独自の の実装に加えて、次のような便利な実装がいくつか含まれています。
+ `[SimpleItemConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-simple-item-converter/index.html)`: は、ビルダークラスと属性記述子を使用してシンプルな変換ロジックを提供します。この実装を利用する方法については、[カスタム項目コンバーターを定義する](ddb-mapper-anno-schema-gen.md#ddb-mapper-anno-schema-custom)「」の例を参照してください。
+ `[HeterogeneousItemConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-heterogeneous-item-converter/index.html)`: は、ディスクリミネーター属性とサブタイプの委任`ItemConverter`インスタンスを使用して、多型変換ロジックを提供します。
+ `[DocumentConverter](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-document-converter/index.html)`: [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) オブジェクト内の非構造化データの変換ロジックを提供します。