2016-10-28 12 views
0

私は自分のプロジェクトでjavaを使ってdynamodbのページ区切りを実装しようとしています。実装しましたが、私はnoを取得する方法に苦労しています。 DynamoDBScanExpressionを使用して1ページあたりの結果の要素数を計算します。誰も助けることができます。おかげ私のプロジェクトでjavaを使用したDynamodbのページ設定

は、ここに私のコード

package com.morrisons.extendedrange.dao; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import com.amazonaws.AmazonServiceException; 
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameOverride; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBQueryExpression; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression; 
import com.amazonaws.services.dynamodbv2.datamodeling.PaginatedScanList; 
import com.amazonaws.services.dynamodbv2.datamodeling.QueryResultPage; 
import com.amazonaws.services.dynamodbv2.datamodeling.ScanResultPage; 
import com.amazonaws.services.dynamodbv2.model.AttributeValue; 
import com.amazonaws.services.dynamodbv2.model.ComparisonOperator; 
import com.amazonaws.services.dynamodbv2.model.Condition; 
import com.amazonaws.services.dynamodbv2.model.ReturnConsumedCapacity; 
import com.google.inject.Inject; 
import com.morrisons.extendedrange.config.ExtendedRangeServiceConfiguration; 
import com.morrisons.extendedrange.entity.ExtendedRangeEntity; 
import com.morrisons.extendedrange.exception.ErrorCodes; 
import com.morrisons.extendedrange.exception.ExtendedRangeServiceException; 
import com.morrisons.extendedrange.model.ExtendedRange; 
import com.morrisons.extendedrange.util.Logger; 
import com.morrisons.extendedrange.util.LoggerFactory; 

/** 
* The Class ExtendedRangeDao. 
*/ 

public class ExtendedRangeDao { 

private static Logger LOGGER; 

@Inject 
private LoggerFactory logFactory; 

Map<String, AttributeValue> lastEvaluatedKey = null; 

@Inject 
private void init() { 
    LOGGER = logFactory.getLogger(ExtendedRangeDao.class); 
} 

/** The range service configuration. */ 
@Inject 
private ExtendedRangeServiceConfiguration extendedRangeServiceConfiguration; 

/** 
* Gets the range. 
* 
* @param storeId 
*   the store id 
* @param catalogId 
*   the catalog id 
* @return the range 
*/ 

public ExtendedRange getExtendedRange(String catalogId, String productId, String page) { 
    LOGGER.debug("ExtendedRangeDao : getExtendedRange start "); 

    List<ExtendedRange> extendedRangeList = new ArrayList<ExtendedRange>(); 



    try { 
     AmazonDynamoDBClient client = extendedRangeServiceConfiguration.getDynamoDBClient(); 
     DynamoDBMapper mapper = new DynamoDBMapper(client);   


     Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>(); 
     eav.put(":val1", new AttributeValue().withS(productId)); 
     eav.put(":val2", new AttributeValue().withS(catalogId)); 


     DynamoDBScanExpression scanExpression=new DynamoDBScanExpression() 


     .withFilterExpression("(productname =:val1 or productid =:val1) and catalogid = :val2 ") 
     .withExpressionAttributeValues(eav) 
     .withConsistentRead(true) 
     .withLimit(5) 

     .withExclusiveStartKey(lastEvaluatedKey) ; 

     ScanResultPage<ExtendedRangeEntity> queryResultPage = mapper.scanPage(ExtendedRangeEntity.class, 
       scanExpression, getDBMapperConfigForFetch()); 

     List<ExtendedRangeEntity> extendedRangeEntityList = queryResultPage.getResults(); 
     lastEvaluatedKey = queryResultPage.getLastEvaluatedKey(); 

     if (extendedRangeEntityList.isEmpty()) { 

      String errorMessage = "No Record found or Multiple data found"; 
      LOGGER.debug(errorMessage); 
      throw new ExtendedRangeServiceException(ErrorCodes.NO_RECORDS_FOUND, "ExtendedRangeEntity not found"); 
     } else { 
      for (ExtendedRangeEntity extendedRangeEntity : extendedRangeEntityList) { 

       ExtendedRange extendedRange = new ExtendedRange(); 
       copyProperties(extendedRange, extendedRangeEntity); 
       extendedRangeList.add(extendedRange); 
       LOGGER.debug("ExtendedRangeDao : getExtendedRange end "); 
      } 

      ExtendedRange returnExtendedRange = new ExtendedRange(); 
      returnExtendedRange.setExtendedRangeList(extendedRangeList); 

      return returnExtendedRange; 
     } 
    } catch (AmazonServiceException e) { 
     String errorMessage = "Error in retrieving Data in DynamoDB"; 
     LOGGER.error(errorMessage, e); 
     throw new ExtendedRangeServiceException(ErrorCodes.AMAZON_SERVICE_ERROR, errorMessage); 
    } 

} 

private DynamoDBMapperConfig getDBMapperConfigForFetch() { 

    String tableName = extendedRangeServiceConfiguration.getTableNameConfig() 
      .getTableName(ExtendedRangeEntity.class); 
    TableNameOverride tableNameOverride = new TableNameOverride(tableName); 
    DynamoDBMapperConfig dbMapperConfig = new DynamoDBMapperConfig(tableNameOverride); 
    return dbMapperConfig; 
} 

public ExtendedRangeServiceConfiguration getExtendedRangeServiceConfiguration() { 
    return extendedRangeServiceConfiguration; 
} 

public void setRangeServiceConfiguration(ExtendedRangeServiceConfiguration extendedRangeServiceConfiguration) { 
    this.extendedRangeServiceConfiguration = extendedRangeServiceConfiguration; 
} 

private void copyProperties(ExtendedRange target, ExtendedRangeEntity src) { 

    target.setProductId(src.getProductId()); 
    target.setLeadTimeUOM(src.getLeadTimeUOM()); 
    target.setCatalogId(src.getCatalogId()); 
    target.setProductDesc(src.getProductDesc()); 
    target.setProductName(src.getProductName()); 
    target.setLeadTime(src.getLeadTime()); 
    target.setCanBeOrderedFromDate(src.getCanBeOrderedFromDate()); 
    target.setCanBeOrderedToDate(src.getCanBeOrderedFromDate()); 

} 

}

答えて

0

size()方法は、ページ内の要素の数を提供すべきです。

queryResultPage.getResults().size() 
+0

私は1ページあたりの結果の数を制限したいと考えています。例えば、もし私が合計で10の要素を持っていると私はページあたり5要素を制限したいので、私は2ページを持っています。 –

関連する問題