dynamodb分页查询

在上一篇文章中,我们使用底层Java api在DynamoDB数据库上发出了查询。

使用DynamoDBMapper进行查询非常简单。

使用哈希键发出查询非常简单。 这样的查询的最佳候选者是通过使用电子邮件哈希键进行搜索的Users表。

public User getUser(String email) {User user = dynamoDBMapper.load(User.class,email);return user;}

由于我们仅对用户表使用哈希键,因此结果将被限制为一个。

加载功能也可用于复合键。 因此,查询登录表项将需要哈希键和范围键。

public Login getLogin(String email,Long date) {Login login =  dynamoDBMapper.load(Login.class,email,date);return login;}

下一步是使用条件发出更复杂的查询。 我们将发出一个查询,该查询将获取两个日期之间的登录尝试。

public List<Login> queryLoginsBetween(String email, Long from, Long to) {Map<String,String> expressionAttributesNames = new HashMap<>();expressionAttributesNames.put("#email","email");expressionAttributesNames.put("#timestamp","timestamp");Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();expressionAttributeValues.put(":emailValue",new AttributeValue().withS(email));expressionAttributeValues.put(":from",new AttributeValue().withN(Long.toString(from)));expressionAttributeValues.put(":to",new AttributeValue().withN(Long.toString(to)));DynamoDBQueryExpression<Login> queryExpression = new DynamoDBQueryExpression<Login>().withKeyConditionExpression("#email = :emailValue and #timestamp BETWEEN :from AND :to ").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues);return dynamoDBMapper.query(Login.class,queryExpression);}

我们使用DynamoDBQueryExpression,其方式与在低级api中使用的方式相同。
主要区别在于我们根本不需要处理分页。 DynamoDBMapper会将DynamoDB项映射到对象,但还将返回“延迟加载”集合。 它最初仅返回一页结果,然后在需要时对下一页进行服务调用。

最后但并非最不重要的是,对索引的查询是基本操作之一。 对于本地或全局二级索引,它是相同的例程。
请记住,获取的结果取决于创建表后指定的投影类型。 在我们的情况下,投影类型适用于所有字段。

public Supervisor getSupervisor(String company,String factory) {Map<String,String> expressionAttributesNames = new HashMap<>();expressionAttributesNames.put("#company","company");expressionAttributesNames.put("#factory","factory");Map<String,AttributeValue> expressionAttributeValues = new HashMap<>();expressionAttributeValues.put(":company",new AttributeValue().withS(company));expressionAttributeValues.put(":factory",new AttributeValue().withS(factory));DynamoDBQueryExpression<Supervisor> dynamoDBQueryExpression = new DynamoDBQueryExpression<Supervisor>().withIndexName("FactoryIndex").withKeyConditionExpression("#company = :company and #factory = :factory ").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues).withConsistentRead(false);List<Supervisor> supervisor = dynamoDBMapper.query(Supervisor.class,dynamoDBQueryExpression);if(supervisor.size()>0) {return supervisor.get(0);} else {return null;}}

要特别注意一致读取设置为false的事实。 DynamoDBQueryExpression使用默认的一致读取。 使用全局二级索引时,无法发出一致的读取。

您可以在github上找到带有单元测试的完整源代码。

翻译自: https://www.javacodegeeks.com/2016/10/__trashed.html

dynamodb分页查询

dynamodb分页查询_使用DynamoDBMapper查询DynamoDB项目相关推荐

  1. dynamodb容器使用_使用DynamoDBMapper扫描DynamoDB项目

    dynamodb容器使用 之前,我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库. 除了发出查询之外,DynamoDB还提供扫描功能. 扫描的目的是获取您 ...

  2. dynamodb容器使用_使用DynamoDBMapper插入DynamoDB项目

    dynamodb容器使用 在上一篇文章中,我们使用DynamoDBMapper来将DynamoDB表映射到Java对象. 插入时,我们的动作几乎相同,但是方式更方便. 为了插入项目,您要做的就是使用对 ...

  3. oracle 查询天,Oracle查询_ 单表查询

    前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...

  4. java数据查询_数据的查询

    -- 创建数据 CREATE DATABASE day2; -- 使用数据库 USE day2; -- 创建一个表格 CREATE TABLE stu( id INT, NAME VARCHAR(20 ...

  5. sql \n 查询_探索SQL查询提示选项(快速N)

    sql \n 查询 In this article, we will introduce SQL queries hint and will analyze the OPTION(Fast 'N') ...

  6. 如何根据vin码查询_车架号查询-VIN查询-车辆识别码查询-宜配网

    请输入17位车架号码: 通过车架号查询车辆信息,在销售配件,二手车交易中十分重要,宜配网车架号在线查询系统,提供免费的车架号查询. 宜配网解码了全球大多数主流车型的车架号,宜配网车架号在线查询系统,不 ...

  7. oracle之子查询_,Oracle子查询详解

    Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...

  8. pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量

    闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...

  9. sql跨表查询_跨表查询经常有,何为跨表更新?

    有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊? 背景 项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为 t_dept_members, ...

最新文章

  1. nslookup type值_nslookup命令详解【转】
  2. 20145235李涛《网络对抗》Exp2 后门原理与实践
  3. 本地安装discuz x2.5(论坛站)程序
  4. angular 路由页面不刷新
  5. bnpparibas
  6. 组合破解windows域账号
  7. jax-rs jax-ws_什么是JAX-RS注释? (第3部分)
  8. 服务器内存条故障显示器,客户的电脑原故障是不开机,现在又变成蓝屏:变着法加钱就搞鬼...
  9. 基于模拟退火算法求解TSP问题(JAVA)
  10. 收集的一些discuz插件常用插件。
  11. ch2 gpio应用:Buzzer封装
  12. BCDboot 命令行选项
  13. MFC TabCtrl 控件修改标签尺寸
  14. 简单介绍一下树莓派zero w
  15. python第三方库 invalid requirement_python第三方库安装出问题
  16. 人工智能与商业智能,区别、定位与联系
  17. 电子商务网站建设系统战略规划报告
  18. Modbus的常见问题解答:RS485总线连接采用什么样的线缆?RS485总线为什么要采用手拉手结构?RS485总线在连接时为什么要屏蔽接地?什么叫共模干扰和差模干扰?如何消除通讯线上的干扰?
  19. 用HTML+CSS做一个漂亮简单的个人网页(第二篇)
  20. JS: onfocus和onblur事件应用举例

热门文章

  1. [选拔赛2 NOIP2018雅礼集训 Day3 u,v,w]玩个三角形(二维差分),玩个球(状压DP+map),玩个树(树上DP)
  2. P2305 [NOI2014] 购票(点分治、斜率优化)
  3. CF891B-Gluttony【构造】
  4. bzoj#4423-[AMPPZ2013]Bytehattan【并查集】
  5. jzoj4802-[GDOI2017模拟9.24]探险计划【费用流,拆点】
  6. P1306-斐波那契公约数【矩阵乘法,数论】
  7. 【c++算法刷题笔记】——洛谷2
  8. SpringBoot @Async加在实现接口类的非接口方法上获取Bean异常
  9. Sentinel(十三)之动态规则扩展
  10. Spark入门(十五)之分组求最小值