使用DynamoDB映射器将DynamoDB项目映射到对象

以前,我们使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 命令 find -exec 操作的问题

最近有这样一个需求,删掉某目录下的一些文件夹。其实就是名为“CVS”的文件夹,用过CVS的人都知道,CVS会在目录的每一级建立一个名为CVS的文件夹,里面放着CVS相关信息,我需要将某目录下所有的名为“CVS”的文件夹删掉。…

雷林鹏分享:C# 运算符

C# 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,分类如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本教程将逐一讲解算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符及…

思科服务器 vmware虚拟多少个hba卡,利用Cisco UCS 管理虚拟机网络(上)

Cisco UCS计算系统针对虚拟化环境的网络管理提供了两种解决方案:一种是纯软件的Cisco Nexus 1000V;一种是基于Cisco UCS M81KR网卡的硬件解决方案。Cisco Nexus 1000V是唯一的第三方分布式虚拟交换机,同样实现了交换机的数据功能和控制功能的…

Pycharm的远程代码编辑

作为一个从Java转到Python的程序猿,一直觉得python的远程代码调试能力不如java,远程调试一把需要各种改代码,牵扯到eventlet库的时候,问题就更严重,需要调整eventlet的各种配置,算了还是不用远程调试了&…

L3-020 至多删三个字符 [DP]

这题在网上看到一个非常容易理解的思路,和大家分享一下。 记dp[i][j]为前i个字符删除j个字符后得到不同字符串的数量,可以得到以下两个转移方程 dp[i][j1]dp[i][j1]dp[i-1][j] (删除s[i]) dp[i][j]dp[i][j]dp[i-1][j] (不删除s[i]) 如果只用上述式子&…

idea中使用osgi_OSGi中的权限

idea中使用osgi在上一篇文章中 ,我们介绍了为Java应用程序实现沙箱的方法,在其中我们可以安全地运行移动代码 。 这篇文章探讨了如何在OSGi环境中执行相同的操作。 OSGi OSGi规范 为Java定义了一个动态模块系统 。 因此,它是实施那种可以使…

我的世界末日之后无限法则服务器,《我的世界》全新玩法无限法则上线

完整细致的世界体系,丰富多样的地图,拥有无限探索可能的新世界欢迎你的到来。春节期间,《我的世界》手游全新玩法《无限法则》重磅上线,带大家一同体验无限创造的魅力。冒险家们,一起开启新世界的冒险之旅吧&#xff0…

python风流史

python的创始人为吉多范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承…

将Infinispan版本映射为最低Java版本

我最近一直在与Infinispan交流 ,我注意到这种“分布式内存键/值数据存储”的特征之一是它相对积极地采用,甚至要求更高版本的Java。 根据参考的Infinispan文档 ,以下内容将Infinispan版本映射到最低必需的Java SE版本。 Infinispan版本及其…

python 在不同层级目录import 模块的方法

http://www.cnitblog.com/seeyeah/archive/2009/03/15/55440.html Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构…

vue-resource ajax跨域,基于Vue-resource jsonp跨域问题的解决方法_婳祎_前端开发者

最近在学习关于什么是jsonp,以及为什么要用jsonp我就不多说了,不明白的同学自行百度一下。我们先来说一下这里我以json数据为例,首先我们通过 $.get可以直接得到一个我们想要的对象,但是用 jsonp 就会出现报错代码如下&#xff0c…

Kali Linux 2016.2初体验

前言 Kali Linux官方于8月30日发布Kali Linux 2016的第二个版本Kali Linux 2016.2。该版本距离Kali Linux 2016.1版本发布,已经有7个月。在这期间,在Kali Linux 2016.2版本发布的这段时间,Kali Linux官方增补了94个更新。 主要的更新大概是这…

ajax servlet增删改查,Servlet ajax 文件上传和JDBC+Servler用户表增删改查

昨天晚上帮一个妹子,应该是大二或者大三的。解决了ServletJDBC实现用户表的增删改查功能,当时妹子遇到的问题是文件上传和日期格式处理不太会。我让她把代码发我,我本地调试,结果发现坑很多,就是很多细节问题。不过对于…

1065 单身狗

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;随后 N 行&#xff…

不,保持警惕不会伤害Java。 关于Java许可的评论。

所以。 Oracle希望通过Java赚钱。 然后,The Register发表了一篇非常对立的文章,上面有一个超级吸引人的标题。 根据他们的消息来源,“ Oracle正在大力加强对其声称违反其许可证的Java客户的审计”。 当Twitter诗句对人们批评甲骨文的行为持批…

移动端ajax,jQuery基于$.ajax设置移动端click超时处理方法

本文实例讲述了jQuery基于$.ajax设置移动端click超时处理方法。分享给大家供大家参考,具体如下:这里介绍jquery click事件如何在移动端自动转换成touchstart事件。因为移动端click事件会比touchstart事件慢几拍移动设备某个元素上事件执行顺序是&#xf…

Python单例模式的4种实现方法

[python] view plaincopy #-*- encodingutf-8 -*- print ----------------------方法1-------------------------- #方法1,实现__new__方法 #并在将一个类的实例绑定到类变量_instance上, #如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回 #如果cl…

java虚拟机-程序计数器PC Register

什么是程序计数器? 程序计数器是一块 较小 的内存空间,它可以看做是当前线程所执行的字节码的 行号指示器 ;在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现)&#xff0c…

织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...

我们在dedecms教程中学到很多,比如可以借助jquery ajax提交dedecms自定义表单到后台。此例只做为参考,实际项目中根据自己的情况酌情修改。html部分:姓名:电话:留言:js部分:function send(){$.a…

R-Tree空间索引算法的研究历程和最新进展分析

摘要:本文介绍了空间索引的概念、R-Tree数据结构和R-Tree空间索引的算法描述,并从R-Tree索引技术的优缺点对R-Tree的改进结构——变种R-Tree进行了论述。最后,对R-Tree的最新研究进展进行了分析。 关键词:空间索引技术&#xff1b…