由于自己不怎么会使用DynamoDB就算看到了官方的文档也无法理解具体细节 这里做一个总结,也方便需要使用的人借鉴。
由于创建表的操作已经再网页完成 这里记录本地使用Java来实现增删改查的步骤。
第一步 配置参数
引入 pom 文件 SpringBoot版本2.1.4
<dependency>
<groupId>com.github.derjust</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>5.0.4</version>
</dependency>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
获得aws对应的 ak sk 和 需要配置的区域 组装出一个客户端Client
static BasicAWSCredentials awsCreds =
new BasicAWSCredentials("AK", "SK");
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withRegion(Regions.AP_SOUTHEAST_1) // 配置你的区域 在你网页右上角显示的
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
这样就组装好了一个客户端
第二步 创建表
在AWS的dynamoDb页面创建表
这里的表面我输入 Movies 主键为 name 后面会使用到
虽然dynamoDb表里的记录是没有属性限制的,也就是两条记录可以有不一样的属性,但是规定了主键之后,属性中必须包含主键
这样我们就创建好了一张主键为name的表
第三步 使用本地调用
3.1创建一个对象类型
@Data
@ToString
@DynamoDBTable(tableName = "Movies")
public static class CatalogItem {
private String name;
private String ISBN;
private Set<String> bookAuthors;
@DynamoDBHashKey(attributeName = "name")
public String getName() {
return name;
}
@DynamoDBAttribute(attributeName = "ISBN")
public String getISBN() {
return ISBN;
}
@DynamoDBAttribute(attributeName = "Authors")
public Set<String> getBookAuthors() {
return bookAuthors;
}
}
增加记录
CatalogItem item = new CatalogItem();
// 作为Key
item.setName("主键");
item.setISBN("526-54112");
item.setBookAuthors(new HashSet<String>(Arrays.asList("修改前的作者1", "修改前的作者2")));
// 保存数据.
DynamoDBMapper mapper = new DynamoDBMapper(client);
mapper.save(item);
查看记录
CatalogItem itemRetrieved = mapper.load(CatalogItem.class, "主键");
System.out.println("记录存储成功 :");
System.out.println(itemRetrieved);
修改记录
itemRetrieved.setISBN("622-2222222222");
itemRetrieved.setBookAuthors(new HashSet<String>(Arrays.asList("修改后的作者1", "修改后的作者2")));
mapper.save(itemRetrieved);
System.out.println("记录已更新 :");
System.out.println(itemRetrieved);
删除记录
mapper.delete(updatedItem);
所有代码 包含了import 内容
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import lombok.Data;
import lombok.ToString;
public class DynamoDBMapperCRUDExample {
static BasicAWSCredentials awsCreds =
new BasicAWSCredentials("AK", "SK");
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withRegion(Regions.AP_SOUTHEAST_1)
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
public static void main(String[] args) throws IOException {
testCRUDOperations();
System.out.println("Example complete!");
}
@Data
@ToString
@DynamoDBTable(tableName = "Movies")
public static class CatalogItem {
private String name;
private String ISBN;
private Set<String> bookAuthors;
@DynamoDBHashKey(attributeName = "name")
public String getName() {
return name;
}
@DynamoDBAttribute(attributeName = "ISBN")
public String getISBN() {
return ISBN;
}
@DynamoDBAttribute(attributeName = "Authors")
public Set<String> getBookAuthors() {
return bookAuthors;
}
}
private static void testCRUDOperations() {
CatalogItem item = new CatalogItem();
// 作为Key
item.setName("主键");
item.setISBN("526-54112");
item.setBookAuthors(new HashSet<String>(Arrays.asList("修改前的作者1", "修改前的作者2")));
// 保存数据.
DynamoDBMapper mapper = new DynamoDBMapper(client);
mapper.save(item);
// 获取刚存的数据.
CatalogItem itemRetrieved = mapper.load(CatalogItem.class, "主键");
System.out.println("记录存储成功 :");
System.out.println(itemRetrieved);
// 修改数据.
itemRetrieved.setISBN("622-2222222222");
itemRetrieved.setBookAuthors(new HashSet<String>(Arrays.asList("修改后的作者1", "修改后的作者2")));
mapper.save(itemRetrieved);
System.out.println("记录已更新 :");
System.out.println(itemRetrieved);
// 查询刚才修改的数据.
DynamoDBMapperConfig config = DynamoDBMapperConfig.builder()
.withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
.build();
CatalogItem updatedItem = mapper.load(CatalogItem.class, "主键", config);
System.out.println("查询修改后的记录为 :");
System.out.println(updatedItem);
// 删除项目/数据
mapper.delete(updatedItem);
// 获取下删除数据是否已删除.
CatalogItem deletedItem = mapper.load(CatalogItem.class, updatedItem.getName(), config);
if (deletedItem == null) {
System.out.println("记录已删除 .");
}
}
}
以上直接把AK SK 写了进去在main 方法调用 后期可以放到 yml 文件注入进来~~~