mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
71 lines
1.8 KiB
Java
71 lines
1.8 KiB
Java
package io.ebeaninternal.server.query;
|
|
|
|
import io.ebeaninternal.api.SpiQuery;
|
|
import io.ebeaninternal.server.core.DtoQueryRequest;
|
|
import io.ebeaninternal.server.persist.Binder;
|
|
|
|
import javax.persistence.PersistenceException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Predicate;
|
|
|
|
public class DtoQueryEngine {
|
|
|
|
private final Binder binder;
|
|
|
|
public DtoQueryEngine(Binder binder) {
|
|
this.binder = binder;
|
|
}
|
|
|
|
public <T> List<T> findList(DtoQueryRequest<T> request) {
|
|
try {
|
|
request.executeSql(binder, SpiQuery.Type.LIST);
|
|
List<T> rows = new ArrayList<>();
|
|
while (request.next()) {
|
|
rows.add(request.readNextBean());
|
|
}
|
|
return rows;
|
|
|
|
} catch (Throwable e) {
|
|
throw new PersistenceException(errMsg(e.getMessage(), request.getSql()), e);
|
|
} finally {
|
|
request.close();
|
|
}
|
|
}
|
|
|
|
public <T> void findEach(DtoQueryRequest<T> request, Consumer<T> consumer) {
|
|
try {
|
|
request.executeSql(binder, SpiQuery.Type.ITERATE);
|
|
while (request.next()) {
|
|
consumer.accept(request.readNextBean());
|
|
}
|
|
} catch (Exception e) {
|
|
throw new PersistenceException(errMsg(e.getMessage(), request.getSql()), e);
|
|
|
|
} finally {
|
|
request.close();
|
|
}
|
|
}
|
|
|
|
public <T> void findEachWhile(DtoQueryRequest<T> request, Predicate<T> consumer) {
|
|
try {
|
|
request.executeSql(binder, SpiQuery.Type.ITERATE);
|
|
while (request.next()) {
|
|
if (!consumer.test(request.readNextBean())) {
|
|
break;
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
throw new PersistenceException(errMsg(e.getMessage(), request.getSql()), e);
|
|
|
|
} finally {
|
|
request.close();
|
|
}
|
|
}
|
|
|
|
private String errMsg(String msg, String sql) {
|
|
return "Query threw SQLException:" + msg + " Query was:" + sql;
|
|
}
|
|
}
|