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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用DynamoDBMapper查询DynamoDB项目

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用DynamoDBMapper查询DynamoDB项目 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上一篇文章中,我們使用底層Java api在DynamoDB數(shù)據(jù)庫上發(fā)出了查詢。

使用DynamoDBMapper進行查詢非常簡單。

使用哈希鍵發(fā)出查詢非常簡單。 這樣的查詢的最佳候選者是通過使用電子郵件哈希鍵進行搜索的Users表。

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

由于我們僅對用戶表使用哈希鍵,因此結果將被限制為1。

加載功能也可用于復合鍵。 因此,查詢登錄表項將需要哈希鍵和范圍鍵。

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

下一步是使用條件發(fā)出更復雜的查詢。 我們將發(fā)出一個查詢,該查詢將獲取兩個日期之間的登錄嘗試。

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中使用它的方式相同。
主要區(qū)別在于我們根本不需要處理分頁。 DynamoDBMapper會將DynamoDB項映射到對象,但還將返回“延遲加載”集合。 它最初僅返回一頁結果,然后在需要時對下一頁進行服務調(diào)用。

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

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使用默認的一致讀取。 使用全局二級索引時,無法發(fā)出一致的讀取。

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

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

總結

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。