翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SDK for Java のバージョン 1 とバージョン 2 での DynamoDB マッピング API の変更
クライアントの作成
| ユースケース | V1 | V2 |
|---|---|---|
|
通常のインスタンス化 |
|
|
|
最小限のインスタンス化 |
|
|
|
属性トランスフォーマーを使用* |
|
|
*V2 の拡張機能は、V1 の属性トランスフォーマーにほぼ対応しています。拡張機能を使用して DynamoDB 拡張クライアントオペレーションをカスタマイズする セクションには、V2 の拡張機能に関する詳細情報が記載されています。
DynamoDB テーブル/インデックスへのマッピングを確立する
V1 では、Bean 注釈を使用して DynamoDB テーブル名を指定します。V2 では、ファクトリメソッドである table() がリモート DynamoDB テーブルを表す DynamoDbTable のインスタンスを生成します。table() メソッドの最初のパラメータは、DynamoDB テーブル名です。
| ユースケース | V1 | V2 |
|---|---|---|
|
Java POJO クラスを DynamoDB テーブルにマッピングする |
|
|
|
DynamoDB セカンダリインデックスへのマッピング |
V1 の |
詳細については、このガイドの「セカンダリインデックスを使用する」セクションを参照してください。 |
テーブルの操作
このセクションでは、ほとんどの標準的なユースケースにおいて V1 と V2 で異なるオペレーション API について説明します。
V2 では、単一のテーブルを含むすべてのオペレーションが、拡張クライアントではなく DynamoDbTable インスタンスで呼び出されます。拡張クライアントには、複数のテーブルをターゲットにできるメソッドが含まれています。
以下の「テーブルオペレーション」という表では、POJO インスタンスは item または customer1 などの特定のタイプとして記載されています。V2 の例の場合、table という名前のインスタンスは、DynamoDbTable インスタンスへの参照を返す enhancedClient.table() を以前に呼び出した結果です。
ほとんどの V2 オペレーションは、表示されていない場合で fluent コンシューマーパターンで呼び出すことができます。例、
Customer customer = table.getItem(r → r.key(key));
or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
V1 オペレーションの場合、テーブルオペレーション (以下) には一般的に使用される形式の一部のみが含まれており、すべてのオーバーロードされた形式が含まれているわけではありません。たとえば、 load() メソッドには次のオーバーロードがあります。
mapper.load(Customer.class, hashKey)
mapper.load(Customer.class, hashKey, rangeKey)
mapper.load(Customer.class, hashKey, config)
mapper.load(Customer.class, hashKey, rangeKey, config)
mapper.load(item)
mapper.load(item, config)
テーブルオペレーション (以下) は、一般的に使用される形式を示しています。
mapper.load(item) mapper.load(item, config)
| ユースケース | V1 | V2 |
|---|---|---|
|
Java POJO を DynamoDB テーブルに書き込む DynamoDB オペレーション:、 |
V1 では、 |
|
|
DynamoDB テーブルから Java POJO に項目を読み込む DynamoDB オペレーション: |
|
|
|
DynamoDB テーブルから項目を削除します。 DynamoDB オペレーション: |
|
|
|
DynamoDB テーブルまたはセカンダリインデックスをクエリし、ページ分割されたリストを返します。 DynamoDB オペレーション: |
|
同期レスポンスには返された |
|
DynamoDB テーブルまたはセカンダリインデックスをクエリしてリストを返します。 DynamoDB オペレーション: |
|
同期レスポンスには返された |
|
DynamoDB テーブルまたはセカンダリインデックスをスキャンしてページ分割されたリストを返します。 DynamoDB オペレーション: |
|
同期レスポンスには返された |
|
DynamoDB テーブルまたはセカンダリインデックスをスキャンしてリストを返します。 DynamoDB オペレーション: |
|
同期レスポンスには返された |
|
複数のテーブルから複数の項目をバッチで読み取ります。 DynamoDB オペレーション: |
|
|
|
複数のテーブルに複数の項目をバッチで書き込みます。 DynamoDB オペレーション: |
|
|
|
複数のテーブルから複数の項目をバッチで削除します。 DynamoDB オペレーション: |
|
|
|
複数の項目をバッチで書き込み/削除します。 DynamoDB オペレーション: |
|
|
|
トランザクション書き込みを実行します。 DynamoDB オペレーション: |
|
|
|
トランザクション読み取りを実行します。 DynamoDB オペレーション: |
|
|
|
クエリの一致する項目の数を取得します。 DynamoDB オペレーション: |
|
|
|
スキャンの一致する項目の数を取得します。 DynamoDB オペレーション: |
|
|
|
POJO クラスに対応するテーブルを DynamoDB に作成します。 DynamoDB オペレーション: |
前のステートメントは、低レベルのテーブル作成リクエストを生成します。ユーザーは DynamoDB クライアントで |
|
|
DynamoDB で並列スキャンを実行します。 DynamoDB オペレーション: |
|
ユーザーはワーカースレッドを処理し、セグメントごとに
|
|
Amazon S3 と DynamoDB を統合してインテリジェントな S3 リンクを保存します。 |
|
Amazon S3 と DynamoDB が結合されるため、サポートされていません。 |
クラスとプロパティをマッピングする
V1 と V2 の両方で、Bean 形式の注釈を使用してクラスをテーブルにマッピングします。V2 には、変更不可能なクラスの使用など、特定のユースケースのスキーマを定義する他の方法もあります。
Bean 注釈
次の表は、V1 および V2 で使用される、特定のユースケースにおける同等の Bean 注釈を示しています。Customer クラスシナリオは、パラメータを説明するために使用されます。
V2 の注釈、クラス、列挙はキャメルケース規則に従い、「DynamoDB」ではなく「DynamoDb」を使用します。
| ユースケース | V1 | V2 |
|---|---|---|
| クラスをテーブルにマップする |
|
テーブル名は、DynamoDbEnhancedClient#table() メソッドを呼び出すときに定義されます。 |
| クラスメンバーをテーブル属性として指定する |
|
|
| クラスメンバーをハッシュ/パーティションキーとして指定する |
|
|
| クラスメンバーを範囲/ソートキーとして指定する |
|
|
| クラスメンバーをセカンダリインデックスのハッシュ/パーティションキーとして指定する |
|
|
| クラスメンバーをセカンダリインデックスの範囲/ソートキーとして指定する |
|
|
| テーブルにマッピングするときにこのクラスメンバーを無視する |
|
|
| クラスメンバーを自動生成された UUID キー属性として指定する |
|
これを提供する拡張機能はデフォルトではロードされません。拡張機能をクライアントビルダーに追加する必要があります。 |
| クラスメンバーを自動生成されたタイムスタンプ属性として指定する |
|
これを提供する拡張機能はデフォルトではロードされません。拡張機能をクライアントビルダーに追加する必要があります。 |
| クラスメンバーを自動で増分されるバージョン属性として指定する |
|
これを提供する拡張機能は自動的にロードされます。 |
| クラスメンバーをカスタム変換を必要とするものとして指定する |
|
|
| クラスメンバーを別の属性タイプとして保存するように指定する |
|
|
| DynamoDB ドキュメント (JSON 形式のドキュメント) またはサブドキュメントにシリアル化できるクラスを指定する |
|
拡張ドキュメント API を使用します。以下のリソースを参照してください。
|
V2 の追加注釈
| ユースケース | V1 | V2 |
|---|---|---|
| Java 値が null の場合、クラスメンバーを NULL 属性として保存しないように指定する | 該当なし |
|
| すべての属性が null の場合、クラスメンバーを空のオブジェクトとなるように指定する | 該当なし |
|
| クラスメンバーの特別な更新アクションを指定する | 該当なし |
|
| 変更不可能なクラスを指定する | 該当なし |
|
| クラスメンバーを自動で増分されるカウンター属性として指定する | 該当なし |
この機能を提供する拡張機能は自動的にロードされます。 |
設定
V1 では、通常、DynamoDBMapperConfig のインスタンスを使用して特定の動作を制御します。設定オブジェクトは、マッパーの作成時またはリクエスト時に指定できます。V2 では、設定は オペレーションのリクエストオブジェクトに固有です。
| ユースケース | V1 | V1 のデフォルト | V2 |
|---|---|---|---|
|
|||
| バッチロード/書き込みの再試行戦略 |
|
失敗した項目を再試行する | 基盤となる DynamoDBClient で再試行戦略を設定します。本ガイドの「AWS SDK for Java 2.x で再試行動作を設定する」を参照してください。 |
| 整合性のある読み込み |
|
EVENTUAL |
デフォルトでは、読み取りオペレーションの整合性のある読み取りは false です。リクエストオブジェクトで、.consistentRead(true) で上書きします。 |
| マーシャラー/アンマーシャラーのセットによる変換スキーマ |
静的実装は、古いバージョンとの下位互換性を提供します。 |
V2_COMPATIBLE |
該当なし。これは、初期の DynamoDB(V1)がデータ型を保存していた方法を指すレガシー機能であり、この動作は拡張クライアントでは保持されません。DynamoDB V1 の動作の一例は、ブール値ではなく数値としてブール値を格納することです。 |
| テーブル名 |
静的実装は、古いバージョンとの下位互換性を提供します。 |
注釈を使用する、またはクラスから推測する |
テーブル名は、 |
| ページ分割ロード戦略 |
オプション: LAZY_ |
LAZY_LOADING |
|
| リクエストメトリクスの収集 |
|
null |
標準 DynamoDB クライアントを構築するときは、metricPublisher() で ClientOverrideConfiguration を使用します。 |
| 保存動作 |
オプションは |
UPDATE |
V2 では、
|
| 型コンバータファクトリ |
|
標準型コンバータ |
次を使用して Bean に設定する
|
オペレーションごとの設定
V1 では、query() などの一部のオペレーションは、オペレーションに送信された「式」オブジェクトを使用して高度に設定できます。例:
DynamoDBQueryExpression<Customer> emailBwQueryExpr = new DynamoDBQueryExpression<Customer>() .withRangeKeyCondition("Email", new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList( new AttributeValue().withS("my"))); mapper.query(Customer.class, emailBwQueryExpr);
V2 では、設定オブジェクトを使用する代わりに、ビルダーを使用してリクエストオブジェクトにパラメータを設定します。例:
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder() .queryConditional(QueryConditional .sortBeginsWith(kb -> kb .sortValue("my"))).build(); customerTable.query(emailBw);
条件式
V2 では、条件式とフィルタリング式は、条件と名前およびフィルターのマッピングをカプセル化する Expression オブジェクトを使用して表現されます。
| ユースケース | オペレーション | V1 | V2 |
|---|---|---|---|
| 予想される属性条件 | save()、delete()、Query()、Scan() |
|
非推奨。代わりに ConditionExpression を使用してください。 |
| 条件式 | delete() |
|
|
| フィルター式 | query()、scan() |
|
|
| クエリの条件式 | query() |
|
|
型変換
デフォルトコンバータ
V2 では、SDK はすべての一般的なタイプに向けてデフォルトコンバータのセットを提供します。タイプコンバータは、全体的なプロバイダーレベルと、単一の属性に対しての両方で変更できます。使用可能なコンバータのリストは、AttributeConverter
属性のカスタムコンバータを設定する
V1 では、@DynamoDBTypeConverted を使用してゲッターメソッドに注釈を付けて、Java 属性型と DynamoDB 属性型を変換するクラスを指定できます。たとえば、Java Currency 型と DynamoDB 文字列を変換する CurrencyFormatConverter は、次のスニペットに示すように適用できます。
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
での前のスニペットに相当する V2 でのスニペットを以下に示します。
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
注記
V1 では、属性自体、タイプ、またはユーザー定義の注釈に注釈を適用できます。V2 では、ゲッターにのみ注釈を適用できます。
タイプコンバータファクトリまたはプロバイダーを追加する
V1 では、独自のタイプコンバータのセットを提供するか、設定にタイプコンバータファクトリを追加することで、任意のタイプを上書きできます。タイプコンバータファクトリは DynamoDBTypeConverterFactory を拡張し、デフォルトセットへの参照を取得してそれを拡張することによって上書きが行われます。以下のスニペットは、その方法を示しています。
DynamoDBTypeConverterFactory typeConverterFactory =
DynamoDBTypeConverterFactory.standard().override()
.with(String.class, CustomBoolean.class, new DynamoDBTypeConverter<String, CustomBoolean>() {
@Override
public String convert(CustomBoolean bool) {
return String.valueOf(bool.getValue());
}
@Override
public CustomBoolean unconvert(String string) {
return new CustomBoolean(Boolean.valueOf(string));
}}).build();
DynamoDBMapperConfig config =
DynamoDBMapperConfig.builder()
.withTypeConverterFactory(typeConverterFactory)
.build();
DynamoDBMapper mapperWithTypeConverterFactory = new DynamoDBMapper(dynamo, config);
V2 は、@DynamoDbBean 注釈を通じて同様の機能を提供します。単一の AttributeConverterProvider または順序付けられた AttributeConverterProvider のチェーンを提供することができます。独自の属性コンバータープロバイダーチェーンを指定すると、デフォルトのコンバータープロバイダーが上書きされ、その属性コンバータを使用するにはチェーンに含める必要があることに注意してください。
@DynamoDbBean(converterProviders = {
ConverterProvider1.class,
ConverterProvider2.class,
DefaultAttributeConverterProvider.class})
public class Customer {
...
}
本ガイドの属性変換に関するセクションには、V2 の完全な例が含まれています。