DynamoDB高级接口

介绍

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。
    ByteBufferB(二进制类型)
    DateS(字符串类型)。日期值存储为符合 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());
}

除此之外,高级接口还支持批量操作(批量添加、批量删除)、查询和扫描事务操作乐观锁等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值