mapper);
/**
@@ -158,28 +156,14 @@ public interface SqlQuery extends Serializable {
Long findSingleLong();
/**
- * Execute the query returning a list of scalar attribute values.
- *
+ * Deprecated - migrate to .mapToScalar(Long.class).findList().
* {@code
*
- * String sql =
- * " select (unit_price * order_qty) " +
- * " from o_order_detail " +
- * " where unit_price > ? " +
- * " order by (unit_price * order_qty) desc";
- *
- * List lineAmounts =
- * DB.sqlQuery(sql)
- * .setParameter(42)
- * .findSingleAttributeList(BigDecimal.class);
- *
- * }
- *
- *
- * The attributeType can be any scalar type that Ebean supports (includes javax time types, Joda types etc).
- *
- * @param attributeType The type of the returned value
+ * .mapToScalar(Long.class)
+ * .findList();
+ * }
*/
+ @Deprecated
List findSingleAttributeList(Class attributeType);
/**
@@ -312,14 +296,23 @@ public interface SqlQuery extends Serializable {
* @param attributeType The type the result is returned as
* @return The query to execute via findOne() findList() etc
*/
- ScalarQuery mapToScalar(Class attributeType);
+ TypeQuery mapToScalar(Class attributeType);
+
+ /**
+ * Use a RowMapper to map the result to beans.
+ *
+ * @param mapper Maps rows to beans
+ * @param The type of beans mapped to
+ * @return The query to execute by findOne() findList() etc
+ */
+ TypeQuery mapTo(RowMapper mapper);
/**
* Query mapping to single scalar values.
*
* @param The type of the scalar values
*/
- interface ScalarQuery {
+ interface TypeQuery {
/**
* Return the single value.
diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
index aa29bce24..ec5b3c01a 100644
--- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
+++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
@@ -208,12 +208,25 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
return query;
}
+ T mapperFindOne(RowMapper mapper) {
+ return server.findOneMapper(this, mapper);
+ }
+
+ List mapperFindList(RowMapper mapper) {
+ return server.findListMapper(this, mapper);
+ }
+
@Override
- public ScalarQuery mapToScalar(Class attributeType) {
+ public TypeQuery mapToScalar(Class attributeType) {
return new Scalar(attributeType);
}
- private class Scalar implements SqlQuery.ScalarQuery {
+ @Override
+ public TypeQuery mapTo(RowMapper mapper) {
+ return new Mapper(mapper);
+ }
+
+ private class Scalar implements SqlQuery.TypeQuery {
private final Class type;
@@ -236,4 +249,28 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
return findSingleAttributeList(type);
}
}
+
+ private class Mapper implements SqlQuery.TypeQuery {
+
+ private final RowMapper mapper;
+
+ Mapper(RowMapper mapper) {
+ this.mapper = mapper;
+ }
+
+ @Override
+ public T findOne() {
+ return mapperFindOne(mapper);
+ }
+
+ @Override
+ public Optional findOneOrEmpty() {
+ return Optional.ofNullable(findOne());
+ }
+
+ @Override
+ public List findList() {
+ return mapperFindList(mapper);
+ }
+ }
}
diff --git a/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java b/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
index 308e350ff..c79f07d21 100644
--- a/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
+++ b/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
@@ -151,7 +151,8 @@ public class SqlQueryTests extends BaseTestCase {
CustDto rob = DB.sqlQuery(sql)
.setParameter("Rob")
- .findOne(CUST_MAPPER);
+ .mapTo(CUST_MAPPER)
+ .findOne();
assertThat(rob.name).isEqualTo("Rob");
}
@@ -164,7 +165,8 @@ public class SqlQueryTests extends BaseTestCase {
String sql = "select id, name, status from o_customer order by name desc";
List dtos = DB.sqlQuery(sql)
- .findList(CUST_MAPPER);
+ .mapTo(CUST_MAPPER)
+ .findList();
assertThat(dtos).isNotEmpty();
}
@@ -200,7 +202,8 @@ public class SqlQueryTests extends BaseTestCase {
long maxId = DB.sqlQuery(sql)
.setParameter("Rob")
- .findOne((resultSet, rowNum) -> resultSet.getLong(1));
+ .mapTo((resultSet, rowNum) -> resultSet.getLong(1))
+ .findOne();
assertThat(maxId).isGreaterThan(0);
}