【AWS】 DynamoDB Java 高级API 实现增删改查 【附图】

由于自己不怎么会使用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页面创建表
创建过程1
这里的表面我输入 Movies 主键为 name 后面会使用到

虽然dynamoDb表里的记录是没有属性限制的,也就是两条记录可以有不一样的属性,但是规定了主键之后,属性中必须包含主键

图片2

这样我们就创建好了一张主键为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 文件注入进来~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值