日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使用Java查询DynamoDB项

發布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Java查询DynamoDB项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一篇文章中,我們繼續在DynamoDB數據庫上插入數據。

在本教程中,我們將對DynamoDB表發出一些基本查詢。 主要規則是每個查詢都必須使用哈希鍵。

查詢的最簡單形式是僅使用哈希鍵。 我們將在此表上查詢Users表。 結果只有一個,因此在迭代“項目”列表上沒有用。

public Map<String,AttributeValue> getUser(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);QueryResult queryResult = amazonDynamoDB.query(queryRequest);List<Map<String,AttributeValue>> attributeValues = queryResult.getItems();if(attributeValues.size()>0) {return attributeValues.get(0);} else {return null;}}

但是,我們可以使用條件發出更復雜的查詢。
登錄表非常適合作為示例。 我們將發出一個查詢,以獲取到日期之間的登錄嘗試。

public List<Map<String ,AttributeValue>> queryLoginsBetween(String email, Date from, Date to) {List<Map<String,AttributeValue>> items = new ArrayList<>();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.getTime())));expressionAttributeValues.put(":to",new AttributeValue().withN(Long.toString(to.getTime())));QueryRequest queryRequest = new QueryRequest().withTableName(TABLE_NAME).withKeyConditionExpression("#email = :emailValue and #timestamp BETWEEN :from AND :to ").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues);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;}

請記住,DynamoDB提取頁面中的數據,因此如果有多個頁面,則必須多次發出同一請求。 因此,您必須使用上次評估的密鑰來處理下一個請求。

最后但并非最不重要的是,對索引的查詢是基本操作之一。 對于本地或全局二級索引,它是相同的例程。
請記住,獲取的結果取決于創建表后指定的投影類型。 在我們的情況下,投影類型適用于所有字段。

我們將使用“主管”表。

public Map<String ,AttributeValue> getSupervisor(String company,String factory) {List<Map<String,AttributeValue>> items = new ArrayList<>();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));QueryRequest queryRequest = new QueryRequest().withTableName(TABLE_NAME).withKeyConditionExpression("#company = :company and #factory = :factory ").withIndexName("FactoryIndex").withExpressionAttributeNames(expressionAttributesNames).withExpressionAttributeValues(expressionAttributeValues);QueryResult queryResult = amazonDynamoDB.query(queryRequest);List<Map<String,AttributeValue>> attributeValues = queryResult.getItems();if(attributeValues.size()>0) {return attributeValues.get(0);} else {return null;}}

您可以在github上找到帶有單元測試的完整源代碼。

翻譯自: https://www.javacodegeeks.com/2016/07/__trashed-4.html

總結

以上是生活随笔為你收集整理的使用Java查询DynamoDB项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。