介绍
WS SDK for Java提供了 DynamoDBMapper 类,可以将代码中的类和DynamoDB的表进行映射。在使用DynamoDBMapper之前,应该先将DynamoDB表中的项目与相应的对象实例定义关系。利用DynamoDB来操作表。
**注意:**DynamoDBMapper可以访问表,执行创建、读取和删除(这里指的是项目,并不是可以对表进行这些操作),要想对表进行操作只能使用DynamoDB的低级接口。
支持的数据类型
Amazon DynamoDB 支持以下基元 Java 数据类型和基元封装类。
-
String
-
Boolean, boolean
-
Byte, byte
-
Date(为 ISO_8601 毫秒精度字符串,转换为 UTC)
-
Calendar(为 ISO_8601 毫秒精度字符串,转换为 UTC)
-
Long, long
-
Integer, int
-
Double, double
-
Float, float
-
BigDecimal
-
BigInteger
下表汇总了上述 Java 类型到 DynamoDB 类型的映射
Java 类型 DynamoDB 类型 所有数字类型 N(数字类型) 字符串 S(字符串类型) 布尔型 BOOL(布尔值类型),0 或 1。 ByteBuffer B(二进制类型) Date S(字符串类型)。日期值存储为符合 ISO-8601 格式的字符串。 Set 集合类型 SS (字符串集) 类型、NS (数字集) 类型或 BS (二进制集) 类型。
使用高级接口
- 定义类和表的映射关系(要使用注解)
- DynamoDB具体用法
高级接口中常用的注解:
示例代码:
import java.util.Set;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
@DynamoDBTable(tableName="ProductCatalog")
public class CatalogItem {
private Integer id;
private String title;
private String ISBN;
private Set<String> bookAuthors;
private String someProp;
@DynamoDBHashKey(attributeName="Id")
public Integer getId() { return id; }
public void setId(Integer id) {this.id = id; }
@DynamoDBAttribute(attributeName="Title")
public String getTitle() {return title; }
public void setTitle(String title) { this.title = title; }
@DynamoDBAttribute(attributeName="ISBN")
public String getISBN() { return ISBN; }
public void setISBN(String ISBN) { this.ISBN = ISBN; }
@DynamoDBAttribute(attributeName="Authors")
public Set<String> getBookAuthors() { return bookAuthors; }
public void setBookAuthors(Set<String> bookAuthors) { this.bookAuthors = bookAuthors; }
@DynamoDBIgnore
public String getSomeProp() { return someProp; }
public void setSomeProp(String someProp) { this.someProp = someProp; }
}
@DynamoDBTable:将类映射到表,参数是tableName,指定表名
@DynamoDBHashKey:将类中的属性映射到表中的主键,默认情况,类属性会映射到表中的同名属性,当类属性名称与表中属性的名称不一致时,要加上attributeName()参数指定与类属性映射的表属性名称
@DynamoDBAttribute:将类中的属性映射到表中的属性,和@DynamoDB相似
@DynamoDBIgnore:该注解所标识的属性不会映射到表中的任何属性
高级接口具体用法
接下来可以使用DynamoDBMapper对表中的项目进行curd操作。
示例代码(往表中增加项目):
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
DynamoDBMapper mapper = new DynamoDBMapper(client);
CatalogItem item = new CatalogItem();
item.setId(102);
item.setTitle("Book 102 Title");
item.setISBN("222-2222222222");
item.setBookAuthors(new HashSet<String>(Arrays.asList("Author 1", "Author 2")));
item.setSomeProp("Test");
mapper.save(item);
示例代码(根据分区键查询):
CatalogItem partitionKey = new CatalogItem();
partitionKey.setId(102);
DynamoDBQueryExpression<CatalogItem> queryExpression = new DynamoDBQueryExpression<CatalogItem>()
.withHashKeyValues(partitionKey);
List<CatalogItem> itemList = mapper.query(CatalogItem.class, queryExpression);
for (int i = 0; i < itemList.size(); i++) {
System.out.println(itemList.get(i).getTitle());
System.out.println(itemList.get(i).getBookAuthors());
}