dynamodb java

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

dynamodb java

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

  1. dynamodb java_使用Java扫描DynamoDB项目

    dynamodb java 在之前的文章中,我们介绍了如何查询DynamoDB数据库 查询DynamoDB第1部分 查询DynamoDB第2部分 . 除了发出查询之外,DynamoDB还提供扫描功能. ...

  2. dynamodb java_使用Java查询DynamoDB项

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

  3. dynamodb java_使用Java更新DynamoDB项

    dynamodb java 在上一篇文章中,我们继续使用Java将项目插入DynamoDB. DynamoDB还支持更新项目. 我们将使用Login表获取更新示例. 发布更新时,必须指定要更新的项目的 ...

  4. dynamodb java_使用Java将项目插入DynamoDB表

    dynamodb java 在上一篇文章中,我们学习了如何使用Java创建DynamoDB表. 下一步是将项目插入到先前创建的DynamoDB表中. 请记住,对于插入操作,最基本的步骤是指定主键. 对 ...

  5. 使用Java第2部分查询DynamoDB项

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

  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. 标记注解 java_【java】细说 JAVA中 标注 注解(annotation)

    Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用 下面我们来详细说说这个注解,到底是怎么 ...

最新文章

  1. 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈
  2. 微信小程序页面间通信的5种方式
  3. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
  4. Linux rmmod命令
  5. 关于基因差异化的那些事 edger Deseq2和limma的使用及一些总结
  6. [Buzz Today]2012.05.10
  7. 小程序接入h5页面_微信小程序跳转到H5页面实战篇
  8. H5清理微信缓存的方案
  9. Windows Server 2016 (Updated Feb 2018) (x64)下载
  10. TF标准模型TensorFlow Mobile for Android
  11. HP服务器配置远程管理端口iLO的基本方法
  12. 灵雀云ACP成功通过金融信创生态实验室适配验证
  13. 怎么将一个音频无损剪切
  14. register_chrdev_region、alloc_chrdev_region、register_chrdev区别
  15. Java服务端集成环信IM
  16. VS CODE 使用介绍
  17. 使用Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法
  18. 中国异丁酸酐(CAS+97-72-3)行业市场供需与战略研究报告
  19. 无法编辑的word文件如何修改
  20. 让脚趾来控制上千人的网络状态,简直太有成就感了

热门文章

  1. P6113-[模板]一般图最大匹配【带花树】
  2. P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】
  3. 2725. [Violet 6]故乡的梦(删边最短路同[TJOI2012]桥)
  4. HDU5119 - Happy Matt Friends
  5. HDU5833 异或方程组的初步学习
  6. 22、mysql主键自增值和偏移量的查看和修改
  7. Sentinel(二十二)之使用Nacos存储规则
  8. Linux--用SecureCRT来上传和下载文件
  9. 10亿个数中找出最大的10000个数
  10. NLP Coursera By Michael Collins - Week1