翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SDK for Java のバージョン 1 とバージョン 2 の間の DynamoDB マッピング APIs の変更
クライアントの作成
ユースケース | V1 | V2 |
---|---|---|
通常のインスタンス化 |
|
|
最小インスタンス化 |
|
|
属性トランスフォーマーを使用* |
|
|
* V2 の拡張機能は、V1 の属性トランスフォーマーにほぼ対応しています。拡張機能を使用して DynamoDB Enhanced Client オペレーションをカスタマイズする セクションには、V2 の拡張機能に関する詳細情報が含まれています。
DynamoDB テーブル/インデックスへのマッピングを確立する
V1 では、Bean 注釈を使用して DynamoDB テーブル名を指定します。ファクトリメソッドである V2 ではtable()
、リモート DynamoDB テーブルDynamoDbTable
を表す のインスタンスを生成します。table()
メソッドの最初のパラメータは、DynamoDB テーブル名です。
ユースケース | V1 | V2 |
---|---|---|
Java POJO クラスを DynamoDB テーブルにマッピングする |
|
|
DynamoDB セカンダリインデックスへのマッピング |
V1 メソッドについて説明する DynamoDB デベロッパーガイドの セクションは、完全な例を示しています。 V1 |
詳細については、このガイドのセカンダリインデックスを使用する「」セクションを参照してください。 |
Table operations
このセクションでは、ほとんどの標準ユースケースで V1 と V2 が異なるオペレーション APIs について説明します。
V2 では、1 つのテーブルを含むすべてのオペレーションが、拡張クライアントではなくDynamoDbTable
インスタンスで呼び出されます。拡張クライアントには、複数のテーブルをターゲットにできるメソッドが含まれています。
以下の表のテーブルオペレーションでは、POJO インスタンスは item
または などの特定のタイプと呼ばれますcustomer1
。という名前の V2 の例の場合、 table
はDynamoDbTable
インスタンスへの参照を返enhancedClient.table()
す を以前に呼び出した結果です。
表示されていない場合でも、ほとんどの V2 オペレーションは流暢なコンシューマーパターンで呼び出すことができることに注意してください。例えば、 などです
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 クライアントを構築するClientOverrideConfiguration ときは、 metricPublisher() で を使用します。 |
保存動作 |
オプションは、 |
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()、can() |
|
|
クエリの条件式 | query() |
|
|
型変換
デフォルトコンバータ
V2 では、SDK はすべての一般的なタイプのデフォルトコンバータのセットを提供します。タイプコンバータは、プロバイダーレベル全体と 1 つの属性の両方で変更できます。使用可能なコンバータのリストは、AttributeConverter
属性のカスタムコンバーターを設定する
V1 では、 を使用して getter メソッドに注釈を付けて@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 の完全な例が含まれています。