dynamodb分页查询_使用DynamoDBMapper查询DynamoDB项目
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项目相关推荐
- dynamodb容器使用_使用DynamoDBMapper扫描DynamoDB项目
dynamodb容器使用 之前,我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库. 除了发出查询之外,DynamoDB还提供扫描功能. 扫描的目的是获取您 ...
- dynamodb容器使用_使用DynamoDBMapper插入DynamoDB项目
dynamodb容器使用 在上一篇文章中,我们使用DynamoDBMapper来将DynamoDB表映射到Java对象. 插入时,我们的动作几乎相同,但是方式更方便. 为了插入项目,您要做的就是使用对 ...
- oracle 查询天,Oracle查询_ 单表查询
前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...
- java数据查询_数据的查询
-- 创建数据 CREATE DATABASE day2; -- 使用数据库 USE day2; -- 创建一个表格 CREATE TABLE stu( id INT, NAME VARCHAR(20 ...
- sql \n 查询_探索SQL查询提示选项(快速N)
sql \n 查询 In this article, we will introduce SQL queries hint and will analyze the OPTION(Fast 'N') ...
- 如何根据vin码查询_车架号查询-VIN查询-车辆识别码查询-宜配网
请输入17位车架号码: 通过车架号查询车辆信息,在销售配件,二手车交易中十分重要,宜配网车架号在线查询系统,提供免费的车架号查询. 宜配网解码了全球大多数主流车型的车架号,宜配网车架号在线查询系统,不 ...
- oracle之子查询_,Oracle子查询详解
Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...
- pytho简单爬虫_模拟登陆西电流量查询_实现一键查询自己的校园网流量
闲来无事,由于校园内网络是限流量的,查询流量很是频繁,于是萌生了写一个本地脚本进行一键查询自己的剩余流量. 整个部分可以分为三个过程进行: 对登陆时http协议进行分析 利用python进行相关的模拟 ...
- sql跨表查询_跨表查询经常有,何为跨表更新?
有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊? 背景 项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为 t_dept_members, ...
最新文章
- nslookup type值_nslookup命令详解【转】
- 20145235李涛《网络对抗》Exp2 后门原理与实践
- 本地安装discuz x2.5(论坛站)程序
- angular 路由页面不刷新
- bnpparibas
- 组合破解windows域账号
- jax-rs jax-ws_什么是JAX-RS注释? (第3部分)
- 服务器内存条故障显示器,客户的电脑原故障是不开机,现在又变成蓝屏:变着法加钱就搞鬼...
- 基于模拟退火算法求解TSP问题(JAVA)
- 收集的一些discuz插件常用插件。
- ch2 gpio应用:Buzzer封装
- BCDboot 命令行选项
- MFC TabCtrl 控件修改标签尺寸
- 简单介绍一下树莓派zero w
- python第三方库 invalid requirement_python第三方库安装出问题
- 人工智能与商业智能,区别、定位与联系
- 电子商务网站建设系统战略规划报告
- Modbus的常见问题解答:RS485总线连接采用什么样的线缆?RS485总线为什么要采用手拉手结构?RS485总线在连接时为什么要屏蔽接地?什么叫共模干扰和差模干扰?如何消除通讯线上的干扰?
- 用HTML+CSS做一个漂亮简单的个人网页(第二篇)
- JS: onfocus和onblur事件应用举例
热门文章
- [选拔赛2 NOIP2018雅礼集训 Day3 u,v,w]玩个三角形(二维差分),玩个球(状压DP+map),玩个树(树上DP)
- P2305 [NOI2014] 购票(点分治、斜率优化)
- CF891B-Gluttony【构造】
- bzoj#4423-[AMPPZ2013]Bytehattan【并查集】
- jzoj4802-[GDOI2017模拟9.24]探险计划【费用流,拆点】
- P1306-斐波那契公约数【矩阵乘法,数论】
- 【c++算法刷题笔记】——洛谷2
- SpringBoot @Async加在实现接口类的非接口方法上获取Bean异常
- Sentinel(十三)之动态规则扩展
- Spark入门(十五)之分组求最小值