使用Java第2部分查询DynamoDB项

在上一篇文章中,我们有机会发布了一些基本的DynamoDB查询操作。

但是,除了基本操作之外,DynamoDB api还为我们提供了一些额外的功能。

投影是具有类似选择功能的功能。
您选择应从DynamoDB项中提取哪些属性。 请记住,使用投影不会对您的查询帐单产生任何影响。

public Map<String,AttributeValue> getRegisterDate(String email) {Map<String,String> expressionAttributesNames = new HashMap<>();expressionAttributesNames.put("#email","email");Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();expressionAttributeValues.put(":emailValue",new AttributeValue().withS(email));QueryRequest queryRequest = new QueryRequest().withTableName(TABLE_NAME).withKeyConditionExpression("#email = :emailValue").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues).withProjectionExpression("registerDate");QueryResult queryResult = amazonDynamoDB.query(queryRequest);List<Map<String,AttributeValue>> attributeValues = queryResult.getItems();if(attributeValues.size()>0) {return attributeValues.get(0);} else {return null;}}

除了选择属性,我们还可以根据我们的范围键指定顺序。 我们将使用scanIndexForward以降序查询登录表。

public List<Map<String,AttributeValue>> fetchLoginsDesc(String email) {List<Map<String,AttributeValue>> items = new ArrayList<>();Map<String,String> expressionAttributesNames = new HashMap<>();expressionAttributesNames.put("#email","email");Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();expressionAttributeValues.put(":emailValue",new AttributeValue().withS(email));QueryRequest queryRequest = new QueryRequest().withTableName(TABLE_NAME).withKeyConditionExpression("#email = :emailValue").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues).withScanIndexForward(false);Map<String,AttributeValue> lastKey = null;do {QueryResult queryResult = amazonDynamoDB.query(queryRequest);List<Map<String,AttributeValue>> results = queryResult.getItems();items.addAll(results);lastKey = queryResult.getLastEvaluatedKey();} while (lastKey!=null);return items;}

数据库的常见功能是对集合中保留的项目进行计数。 在我们的情况下,我们要计算特定用户的登录次数。 但是,请特别注意,因为计数功能只不过是对已提取的项目总数进行计数,因此,这将使您像在提取项目一样花费很多。

public Integer countLogins(String email) {List<Map<String,AttributeValue>> items = new ArrayList<>();Map<String,String> expressionAttributesNames = new HashMap<>();expressionAttributesNames.put("#email","email");Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();expressionAttributeValues.put(":emailValue",new AttributeValue().withS(email));QueryRequest queryRequest = new QueryRequest().withTableName(TABLE_NAME).withKeyConditionExpression("#email = :emailValue").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues).withSelect(Select.COUNT);Map<String,AttributeValue> lastKey = null;QueryResult queryResult = amazonDynamoDB.query(queryRequest);List<Map<String,AttributeValue>> results = queryResult.getItems();return queryResult.getCount();}

DynamoDB的另一个功能是批量获取项目,即使它们属于不同的表也是如此。 在属于特定上下文的数据通过不同的表分布的情况下,这确实很有用。 每个获取项都作为DynamoDB读取操作进行处理和收费。 如果是批量获取项,则应指定所有表键,因为BatchGetItem的每个查询的目的都是获取单个项。

public Map<String,List<Map<String,AttributeValue>>> getMultipleInformation(String email,String name) {Map<String,KeysAndAttributes> requestItems = new HashMap<>();List<Map<String,AttributeValue>> userKeys = new ArrayList<>();Map<String,AttributeValue> userAttributes = new HashMap<>();userAttributes.put("email",new AttributeValue().withS(email));userKeys.add(userAttributes);requestItems.put(UserRepository.TABLE_NAME,new KeysAndAttributes().withKeys(userKeys));List<Map<String,AttributeValue>> supervisorKeys = new ArrayList<>();Map<String,AttributeValue> supervisorAttributes = new HashMap<>();supervisorAttributes.put("name",new AttributeValue().withS(name));supervisorKeys.add(supervisorAttributes);requestItems.put(SupervisorRepository.TABLE_NAME,new KeysAndAttributes().withKeys(supervisorKeys));BatchGetItemRequest batchGetItemRequest = new BatchGetItemRequest();batchGetItemRequest.setRequestItems(requestItems);BatchGetItemResult batchGetItemResult = amazonDynamoDB.batchGetItem(batchGetItemRequest);Map<String,List<Map<String,AttributeValue>>> responses = batchGetItemResult.getResponses();return responses;}

您可以在github上找到源代码

翻译自: https://www.javacodegeeks.com/2016/07/query-dynamodb-items-java-part-2.html

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

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

相关文章

XSS

1.什么是xss XSS攻击全称跨站脚本攻击&#xff0c;是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS&#xff0c;XSS是一种在web应用中的计算机安全漏洞&#xff0c;它允许恶意web用户将代码植入到提供给其它用户使用的页面中…

C++中引用传递与指针传递区别(进一步整理)

C中引用传递与指针传递区别&#xff08;进一步整理&#xff09; 博客分类&#xff1a; C/C CCC#J# 从概念上讲。指针从本质上讲就是存放变量地址的一个变量&#xff0c;在逻辑上是独立的&#xff0c;它可以被改变&#xff0c;包括其所指向的地址的改变和其指向的地址中所存放的…

Python之匿名函数

一、匿名函数&#xff1a;也叫lambda表达式 1.匿名函数的核心&#xff1a;一些简单的需要用函数去解决的问题&#xff0c;匿名函数的函数体只有一行 2.参数可以有多个&#xff0c;用逗号隔开 3.返回值和正常的函数一样可以是任意的数据类型 二、匿名函数练习 请把下面的函数转换…

C++中const用法总结

C中const用法总结 Posted on 2009-04-21 22:55 月光林地 阅读(7821) 评论(2) 编辑 收藏 1. const修饰普通变量和指针 const修饰变量&#xff0c;一般有两种写法&#xff1a; const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是&#xff1a;const修…

vaadin_5分钟内Google App Engine上的Vaadin App

vaadin在本教程中&#xff0c;您将学习如何创建第一个Vaadin Web应用程序&#xff0c;如何在本地AppEngine开发服务器上运行它以及如何将其部署到Google App Engine基础结构。 所有这些大约需要5到10分钟。 是的&#xff0c;如果您已经安装了必要的先决条件&#xff0c;则可以立…

【Java深入研究】10、红黑树

一、红黑树介绍 红黑树是二叉查找树&#xff0c;红黑树的时间复杂度为: O(lgn) 红黑树的特性&#xff1a;&#xff08;1&#xff09;每个节点或者是黑色&#xff0c;或者是红色。&#xff08;2&#xff09;根节点是黑色。&#xff08;3&#xff09;每个叶子节点&#xff08;NIL…

MATLAB排序函数

MATLAB排序函数 (2011-06-29 13:02:08) 源自网络 sort(A)若A是向量不管是列还是行向量&#xff0c;默认都是对A进行升序排列。sort(A)是默认的升序&#xff0c;而sort(A,descend)是降序排序。 sort(A)若A是矩阵&#xff0c;默认对A的各列进行升序排列 sort(A,dim) dim1时等效s…

【分形】【洛谷P1498】

https://www.luogu.org/problemnew/show/P1498 题目描述 自从到了南蛮之地&#xff0c;孔明不仅把孟获收拾的服服帖帖&#xff0c;而且还发现了不少少数民族的智慧&#xff0c;他发现少数民族的图腾往往有着一种分形的效果&#xff0c;在得到了酋长的传授后&#xff0c;孔明掌握…

Java认证:认证或不认证

专业认证始终是一个有争议的主题&#xff0c;有资格的人在争论收益与成本/时间之间的关系。 通过Oracle的Java认证&#xff0c;我认为有两个主要的受众可以从中受益&#xff1a; 那些开始从事软件事业的人。 扎实的工作经验和可证明的代码将永远是潜在雇主的首要考虑因素。 但…

linux下杀死进程全权讲解

linux下杀死进程全权讲解 2009-10-27 08:57 佚名 linux 我要评论(0) 字号&#xff1a;T | T本文将详细讲解linux杀死进程的多种命令&#xff0c;包含他们的作用&#xff0c;kill作用&#xff1a;根据进程号杀死进程&#xff1b; killall作用&#xff1a;通过程序的名字&#xf…

python学习笔记(10)--组合数据类型(序列类型)

序列是具有先后关系的一组数据&#xff0c;是一维元素向量&#xff0c;元素类型可以不同&#xff0c;类似数学元素序列&#xff0c;元素间由序号引导&#xff0c;通过下标访问序列的特定元素。序列类型是一个基类类型&#xff0c;字符串类型&#xff0c;元祖类型&#xff0c;列…

Java Process中waitFor()的问题

Java Process中waitFor()的问题 http://yearsaaaa123789.iteye.com/blog/1404865在编写Java程序时&#xff0c;有时候我们需要调用其他的诸如exe,shell这样的程序或脚本。在Java中提供了两种方法来启动其他程序&#xff1a;(1) 使用Runtime的exec()方法(2) 使用ProcessBuilder…

java jsr_Java EE 7中包含哪些JSR?

java jsr我开始填写所有应该包含在Java EE 7中的Java规范请求的表。 由于仍在决定平台版本&#xff0c;因此某些细节很难确定。 完整的Java EE 7 EJB产品具有以下标准组件和API&#xff1a; 名称 版 描述 JSR 网页 个人资料 批处理 1.0 批量处理 352 Bean验证 1…

※※Java调用Runtime.exec()要注意的问题

※※Java调用Runtime.exec()要注意的问题标签&#xff1a;execJavaRuntime字体&#xff1a;【默认中大】 http://it.superkoo.com/#/topic/479/ 最近开发一个项目需要在JAVA中调用VC写的一个EXE程序&#xff0c;首先想到的方法肯定是用Runtime.exec()&#xff0c;但一写就发现&…

应用程序模块和实体缓存

任何具有ADF业务组件基础知识的ADF开发人员都应该熟悉下图&#xff1a; 它代表运行时ADF业务组件的核心构建块。 有一个包含视图对象实例的根应用程序模块实例。 视图对象实例可能由存储在实体集合或换句话说就是实体缓存中的实体对象备份。 根应用程序模块可能还包含嵌套的应…

kubernetes-dashboard(1.8.3)部署与踩坑

Kubernetes Dashboard 是一个管理Kubernetes集群的全功能Web界面&#xff0c;旨在以UI的方式完全替代命令行工具&#xff08;kubectl 等&#xff09;。 目录 部署创建用户集成Heapster访问 kubectl proxyNodePortAPI ServerIngress部署 Dashboard需要用到k8s.gcr.io/kubernetes…

MFC中打开文件对话框:CFileDlg

MFC中打开文件对话框:CFileDlg CFileDialog 文件选择对话框的使用&#xff1a;首先构造一个对象并提供相应的参数&#xff0c;构造函数原型如下&#xff1a; CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt NULL, LPCTSTR lpszFileName NULL, DWORD d…

TCL座机日期时间调整

设置日期时间&#xff1a;1.按“挂断/设置”键&#xff0c;显示“SET 12345678”2.按1&#xff08;一般情况下1为设置日期&#xff09;&#xff0c;显示“1-date 2-cl”&#xff0c;3.按1显示 “d2012 01-01”&#xff08;设置年月日&#xff0c;也就是直接按数字键设定年月日&…

MFC多线程编程

MFC多线程编程 (2007-11-20 17:56:36) 分类&#xff1a; vc 基于MFC的多线程编程 MFC是微软的VC开发集成环境中提供给程序员的基础函数库&#xff0c;它用类库的方式将Win32 API进行封装&#xff0c;以类的方式提供给开发者。由于其快速、简捷、功能强大等特点深受广大开发者喜…

oracle线程阻塞_Oracle Service Bus –线程阻塞案例研究

oracle线程阻塞本案例研究描述了在AIX 6.1和IBM Java VM 1.6上运行的Oracle Service Bus 11g遇到的线程阻塞问题的完整根本原因分析过程。 本文也是您提高线程转储分析技能的绝佳机会&#xff0c;我强烈建议您学习并正确理解以下分析方法。 它还将展示正确数据收集的重要性&…