以前,我们使用Java创建了DynamoDB表。

对于各种数据库(例如sql数据库或nosql),有一组工具可帮助访问,持久化和管理对象/类与基础数据库之间的数据。 例如,对于SQL数据库,我们使用JPA,对于Cassandra,我们使用MappingManager。

DynamoDBMapper是使您能够访问各种表中的数据,对项目执行各种CRUD操作以及对表执行查询和扫描的工具。

我们将尝试映射上一个示例中的“用户”,“登录名”,“主管”和“公司”表。
Users是一个简单的表,使用用户的电子邮件作为哈希键。

package com.gkatzioura.dynamodb.mapper.entities;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;/*** Created by gkatzioura on 9/20/16.*/
@DynamoDBTable(tableName="Users")
public class User {private String email;private String fullName;@DynamoDBHashKey(attributeName="email")public String getEmail() {return email;}@DynamoDBAttribute(attributeName="fullname")public void setEmail(String email) {this.email = email;}public String getFullName() {return fullName;}public void setFullName(String fullName) {this.fullName = fullName;}
}

但是,在各种情况下,我们的DynamoDB表都使用哈希和范围键。 Logins表跟踪用户的登录尝试。 电子邮件是哈希键,时间戳是范围键。

package com.gkatzioura.dynamodb.mapper.entities;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;/*** Created by gkatzioura on 9/20/16.*/
@DynamoDBTable(tableName="Logins")
public class Login {private String email;private Long timestamp;@DynamoDBHashKey(attributeName="email")public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@DynamoDBRangeKey(attributeName="timestamp")public Long getTimestamp() {return timestamp;}public void setTimestamp(Long timestamp) {this.timestamp = timestamp;}
}

另一种流行的情况是带有全局二级索引(GSI)的表。 例如,“主管”表用于按主管的姓名检索主管。 但是,我们也使用此表来检索特定公司的所有主管或在公司特定工厂工作的主管。
主管名称是我们的哈希键,公司名称是哈希键,工厂名称是全局二级索引的范围键。

package com.gkatzioura.dynamodb.mapper.entities;import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;/*** Created by gkatzioura on 9/21/16.*/
@DynamoDBTable(tableName="Supervisors")
public class Supervisor {private String name;private String company;private String factory;@DynamoDBHashKey(attributeName="name")public String getName() {return name;}public void setName(String name) {this.name = name;}@DynamoDBIndexHashKey(globalSecondaryIndexName = "FactoryIndex",attributeName = "company")public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}@DynamoDBIndexRangeKey(globalSecondaryIndexName = "FactoryIndex",attributeName = "factory")public String getFactory() {return factory;}public void setFactory(String factory) {this.factory = factory;}
}

最后但并非最不重要的一点是,我们可以使用本地二级索引。 公司表使用公司名称作为哈希键,使用子公司名称作为范围键。 由于我们要基于公司的CEO发出查询,因此将本地二级索引与基于CEO姓名的范围键一起使用。

package com.gkatzioura.dynamodb.mapper.entities;import com.amazonaws.services.dynamodbv2.datamodeling.*;/*** Created by gkatzioura on 9/21/16.*/
@DynamoDBTable(tableName="Companies")
public class Company {private String name;private String subsidiary;private String ceo;@DynamoDBHashKey(attributeName="name")public String getName() {return name;}public void setName(String name) {this.name = name;}@DynamoDBRangeKey(attributeName = "subsidiary")public String getSubsidiary() {return subsidiary;}public void setSubsidiary(String subsidiary) {this.subsidiary = subsidiary;}@DynamoDBIndexRangeKey(localSecondaryIndexName = "CeoIndex",attributeName = "ceo")public String getCeo() {return ceo;}public void setCeo(String ceo) {this.ceo = ceo;}
}

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2016/09/map-dynamodb-items-objects-using-dynamodb-mapper.html

使用DynamoDB映射器将DynamoDB项目映射到对象相关推荐

  1. MyBatis学习之映射器Mapper(接口映射器+xml映射文件)

    Table of Contents 01 MyBatis映射器: 1.1 接口映射器+xml映射器 1.2 接口映射器+注解 02 接口映射器+xml映射器  方式 2.1 mybatis配置文件 引 ...

  2. dynamodb容器使用_使用DynamoDB映射器将DynamoDB项目映射到对象

    dynamodb容器使用 以前,我们使用Java创建了DynamoDB表. 对于各种数据库,例如sql数据库或nosql,有一组工具可帮助访问,持久化和管理对象/类与基础数据库之间的数据. 例如,对于 ...

  3. [MyBatis日记](3)映射器配置文件与映射器接口

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunnyYoona/article/details/50659993 前一篇文章([MyBatis日 ...

  4. 【SpringMVC框架】非注解的处理器映射器和适配器

    非注解的处理器映射器和适配器 1.非注解的处理器映射器 之前的处理器映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerMap ...

  5. MapStruct系列(5)-映射器数据类型转换详解

    文章目录 前言 1. 隐式类型转换 2. 映射引用类型 3. 嵌套映射 4. 调用自定义映射方法 5. 调用其他映射器 6. 将映射目标类型传递给自定义映射器 7. 将上下文或状态对象传递给自定义方法 ...

  6. Spring MVC源码解析——HandlerMapping(处理器映射器)

    Sping MVC 源码解析--HandlerMapping处理器映射器 1. 什么是HandlerMapping 2. HandlerMapping 2.1 HandlerMapping初始化 2. ...

  7. mybatis映射器用法

    mybatis映射器 映射器: 系统并没有给出固定且明确的概念,我的理解是:映射器实现了数据库和Java之间数据的交互. 映射器包含了增删改查和结果映射. mybatis映射器分类: mybatis映 ...

  8. mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

    记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...

  9. java的对象对象映射_Java对象到对象映射器

    java的对象对象映射 我在该项目上使用了Dozer一段时间. 但是,最近我遇到了一个非常有趣的错误,这促使我环顾四周,并尝试使用其他"对象到对象"映射器. 这是我找到的工具列表: ...

最新文章

  1. 相机标定的基本原理与经验分享
  2. copy of an AVPacket structure
  3. 校验数字签名防止apkP二次打包
  4. Winforn中怎样在窗体中打开另一个窗体
  5. 移动APP接口安全性设计
  6. CodeForces - 1332D Walk on Matrix(构造)
  7. 思维导图下载 注册安全_【思维导图】初中各科思维导图,涵盖3年各科所有知识点,可下载打印!...
  8. Vue-Router + Vuex 实现单页面应用
  9. 【汇编优化】之X86汇编优化
  10. 可用的免费公开的DNS
  11. rust石头墙几个c4_从安顺自驾石头寨一日游
  12. switch分解试验部分-LAB8:SVI实验
  13. 数据库信息查询(作者不是我)
  14. Python 愤怒的小鸟代码实现:物理引擎pymunk使用
  15. 前端3D立体魔方小游戏
  16. QM 、QA和QC的区别
  17. 苹果手机打电话没有声音怎么回事_手机打电话听筒没有声音,只有打开免提时才有声音,该怎么办?...
  18. 广西农业技术职业学院计算机,广西农业职业技术学院宿舍怎么样
  19. R 散点图,添加标签
  20. java区分输入的字母是元音字母还是辅音字母

热门文章

  1. 如何在一分钟内搞定面试官
  2. 漫画:如何用Zookeeper实现分布式锁?
  3. 修改Tomcat编码方式的两种方法
  4. Java 高并发下的实践
  5. 循环录入某学生 5 门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误
  6. SSM整合简单登录案例
  7. Zull路由网关---SpringCloud
  8. Android模拟器之神奇Genymotion的安装
  9. 本地java【动态监听】zk集群节点变化
  10. java反射的工具类的函数集合