package io.ebean; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; /** * Query for performing native SQL queries that return DTO Bean's. *
* These beans are just normal classes. They must have public constructors * and setters. *
* Constructors with arguments are used if the number of constructor arguments * matches the number of columns in the resultSet. *
** If the number of columns in the resultSet is greater than the largest constructor * then the largest constructor is used for the first columns and remaining columns * are mapped by setter methods. *
* *{@code
*
* // CustomerDto is just a 'bean like' class
* // with public constructor(s) and public setter methods
*
* String sql = "select id, name from customer where name like :name and status_code = :status";
*
* List beans =
* DB.findDto(CustomerDto.class, sql)
* .setParameter("name", "Acme%")
* .setParameter("status", "ACTIVE")
* .findList();
*
* }
*/
public interface DtoQuery
* Note that the QueryIterator holds resources related to the underlying
* resultSet and potentially connection and MUST be closed. We should use
* QueryIterator in a try with resource block.
*/
@Nonnull
QueryIterator
* Note that the Stream holds resources related to the underlying
* resultSet and potentially connection and MUST be closed. We should use
* the Stream in a try with resource block.
*/
@Nonnull
Stream
* This streaming type query is useful for large query execution as only 1 row needs to be held in memory.
*
* This runs like findEach streaming results from the database but just collects the results
* into batches to pass to the consumer.
*
* @param batch The number of dto beans to collect before given them to the consumer
* @param consumer The consumer to process the batch of DTO beans
*/
void findEach(int batch, Consumer
* Returning false after processing a row stops the iteration through the query results.
*
* This streaming type query is useful for large query execution as only 1 row needs to be held in memory.
*
* Binds each parameter moving the index position each time.
*
* A convenience for multiple calls to {@link #setParameter(Object)}
*/
DtoQuery
* Bind the parameter using index position starting at 1 and incrementing.
*
*/
DtoQuery
* This will typically result in a call to setQueryTimeout() on a
* preparedStatement. If the timeout occurs an exception will be thrown - this
* will be a SQLException wrapped up in a PersistenceException.
*
* Gives the JDBC driver a hint as to the number of rows that should be
* fetched from the database when more rows are needed for ResultSet.
* > consumer);
/**
* Execute the query iterating a row at a time with the ability to stop consuming part way through.
*