在上一篇文章中,我们有机会发布了一些基本的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

使用Java第2部分查询DynamoDB项相关推荐

  1. dynamodb java_使用Java第2部分查询DynamoDB项

    dynamodb java 在上一篇文章中,我们有机会发布了一些基本的DynamoDB查询操作. 但是,除了基本操作之外,DynamoDB api还为我们提供了一些额外的功能. 投影是具有类似选择功能 ...

  2. dynamodb java_使用Java查询DynamoDB项

    dynamodb java 在上一篇文章中,我们继续在DynamoDB数据库上插入数据. 在本教程中,我们将对DynamoDB表发出一些基本查询. 主要规则是每个查询都必须使用哈希键. 查询的最简单形 ...

  3. 使用Java查询DynamoDB项

    在上一篇文章中,我们继续在DynamoDB数据库上插入数据. 在本教程中,我们将对DynamoDB表发出一些基本查询. 主要规则是每个查询都必须使用哈希键. 查询的最简单形式是仅使用哈希键. 我们将在 ...

  4. dynamodb分页查询_使用DynamoDBMapper查询DynamoDB项目

    dynamodb分页查询 在上一篇文章中,我们使用底层Java api在DynamoDB数据库上发出了查询. 使用DynamoDBMapper进行查询非常简单. 使用哈希键发出查询非常简单. 这样的查 ...

  5. 使用DynamoDBMapper查询DynamoDB项目

    在上一篇文章中,我们使用底层Java api在DynamoDB数据库上发出了查询. 使用DynamoDBMapper进行查询非常简单. 使用哈希键发出查询非常简单. 这样的查询的最佳候选者是通过使用电 ...

  6. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

  7. java实现三级联动查询_Java框架SSH结合Easyui控件实现省市县三级联动示例解析

    Easyui调用数据库实现省市县区三级联动的效果如果下 1.首先要设计数据库,如图所示.一个有4个字段code,note,pycode.code:行政区划代码,note:中文注释,pycode:拼音缩 ...

  8. java对Oracle数据库查询_java 连接Oracle数据库 查询

    java 连接Oracle数据库 查询 (2014-03-03 16:07:15) 标签: it 在ADF要先引入jar包 Oracle JDBC ;不然加载驱动不会成功. public static ...

  9. 2021年,Java开发者值得学习的13项技能

    本文分享自百度开发者中心2021年,Java开发者值得学习的13项技能 作者 | Olivia Cuthbert 译者 | 王强 策划 | 刘燕 如果你想在这个竞争激烈的世界里,成为一名熟练开发 Ja ...

最新文章

  1. miui通知栏要点两下_MIUI免费主题分享,半透明通知栏很好看,另附壁纸!
  2. uni-app 封装企业微信config
  3. android刷机教程视频,Android 设备刷机教程
  4. 2009年SOA七大预测:SOA借力云计算
  5. #RANK_1 极其简单的递归——骑士与金币
  6. bzoj2721樱花——质因数分解
  7. python中oxf2是多少_python 函数基础2
  8. 怎么向Xcode6 IOS8之后向项目中添加预编译文件
  9. linux课程设计ftp概要设计,Ftp客户端概要设计
  10. 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises15
  11. 2021 微信小程序连接微信支付流程教程
  12. 编译Android系统源码和内核源码
  13. HeartBeat的一些介绍和功能上的一些总结
  14. 人工智能导论--基于神经网络的模式识别实验
  15. 【二分答案】JZOJ_3337 wyl8899的TLE
  16. 小游戏——满天小星星
  17. 服务器日志文件已被清除恢复,Linux服务器入侵后日志文件删除/恢复方法
  18. ChatGPT指令大全(中文版)
  19. Ipad恢复按键音、锁定音和截屏音
  20. Debian dns设置

热门文章

  1. Oracle入门(十四.10)之显式游标简介
  2. 2017年,Java程序猿10本经典好书推荐
  3. 如何将HBuilder中的项目Push至Gitee中!
  4. 最全、最详细的配置jdk十步法!
  5. 指纹识别软件安装包下载
  6. ES报错:Connection reset by peer 解决经历
  7. jvm(4)-虚拟机性能监控与故障处理工具
  8. HDU2059(DP)
  9. 自动配置jdk_JDK 15中自动自动发送更好的NullPointerException消息
  10. java streams_使用JShell的Java 9 Streams API