第49夜 DynamoDBの高レベルAPIを試す
DynamoDBはSimpleDBとほぼ同様の使い勝手の低レベルAPIのほかに高レベルAPIが最初から用意されているのがポイントだ。
低レベルAPIについては前回紹介済みなのでそちらを参照。
http://d.hatena.ne.jp/shin/20120125/p1
構成は前回と同様。
テーブル名は「testdb」主キーは「id」という項目名で数値型。もうひとつが「名前」という文字列型。
マッピングクラス
マッピングするクラス。プロパティ名が項目名と同一の場合ゲッターに対してのアノテーション付与は必要ない。ただし、キーの設定だけは保存時などに必要。フィールドに対しては効果がないので注意。いまどきのフレームワークは大抵フィールドでも動くからね。
@DynamoDBTable(tableName="testdb") public class TestDBEntity { int id; String 名前; @DynamoDBHashKey public int getId() { return id; } public void setId(int id) { this.id = id; } public String get名前() { return 名前; } public void set名前(String 名前) { this.名前 = 名前; } }
接続
接続までは前回と同じ。ただし、接続先は東京リージョンを指定してみた。
String access_key = "hogehoge"; String secret_keykey = "hugahuga"; BasicAWSCredentials ac = new BasicAWSCredentials(access_key, secret_keykey); AmazonDynamoDBClient client = new AmazonDynamoDBClient(ac); //リージョン指定 client.setEndpoint("dynamodb.ap-northeast-1.amazonaws.com");
ID指定で検索
非常にシンプル。
TestDBEntity e = mapper.load(TestDBEntity.class, 100); System.out.println(e.getId() + "=" + e.get名前());
条件指定検索
この場合は条件なしにしているので全件取得しているけど、scanに対して検索条件の指定が可能だ。
DynamoDBMapper mapper = new DynamoDBMapper(client); DynamoDBScanExpression scan = new DynamoDBScanExpression(); List<TestDBEntity> result = mapper.scan(TestDBEntity.class, scan); for(TestDBEntity row : result){ System.out.println(row.getId() + "=" + row.get名前()); }
新規追加、または更新
同じキーがあれば上書き、なければ新規追加する。
TestDBEntity e = new TestDBEntity(); e.setId(100); e.set名前("なまえ"); mapper.save(e);