code: public <T> PaginatedQueryList<T> query(Class<T> clazz, DynamoDBQueryExpression queryExpression, DynamoDBMapperConfig config) {
          config = mergeConfig(config);
  
          QueryRequest queryRequest = createQueryRequestFromExpression(clazz, queryExpression, config);
  
          QueryResult queryResult = db.query(applyUserAgent(queryRequest));
          return new PaginatedQueryList<T>(this, clazz, db, queryRequest, queryResult);
      }
docs: Queries an Amazon DynamoDB table and returns the matching results as an
  unmodifiable list of instantiated objects. The table to query is
  determined by looking at the annotations on the specified class, which
  declares where to store the object data in Amazon DynamoDB, and the query
  expression parameter allows the caller to filter results and control how
  the query is executed.
  <p>
  Callers should be aware that the returned list is unmodifiable, and any
  attempts to modify the list will result in an
  UnsupportedOperationException.
  <p>
  The unmodifiable list returned is lazily loaded when possible, so calls
  to DynamoDB will be made only as needed.
  
  @param <T>
  The type of the objects being returned.
  @param clazz
  The class annotated with DynamoDB annotations describing how
  to store the object data in Amazon DynamoDB.
  @param queryExpression
  Details on how to run the query, including any conditions on
  the key values
  @param config
  The configuration to use for this query, which overrides the
  default provided at object construction.
  @return An unmodifiable list of the objects constructed from the results
  of the query operation.
  @see PaginatedQueryList