diff --git a/src/main/java/io/ebean/SqlQuery.java b/src/main/java/io/ebean/SqlQuery.java index d5a71f232..1c4e6e680 100644 --- a/src/main/java/io/ebean/SqlQuery.java +++ b/src/main/java/io/ebean/SqlQuery.java @@ -195,6 +195,31 @@ public interface SqlQuery extends Serializable { */ SqlQuery setParameter(String name, Object value); + /** + * Set one of more positioned parameters. + *
+ * This is a convenient alternative to multiple calls setParameter(). + * + *
{@code
+ *
+ * String sql = "select id, name from customer where name like ? and status = ?";
+ *
+ * Ebean.createSqlQuery(sql)
+ * .setParams("Rob", Status.NEW)
+ * .findList();
+ *
+ *
+ * // is the same as ...
+ *
+ * Ebean.createSqlQuery(sql)
+ * .setParameter(1, "Rob")
+ * .setParameter(2, "Status.NEW)
+ * .findList();
+ *
+ * }
+ */
+ SqlQuery setParams(Object... values);
+
/**
* The same as bind for positioned parameters.
*/
diff --git a/src/main/java/io/ebean/SqlUpdate.java b/src/main/java/io/ebean/SqlUpdate.java
index 27e7be39e..bd104c344 100644
--- a/src/main/java/io/ebean/SqlUpdate.java
+++ b/src/main/java/io/ebean/SqlUpdate.java
@@ -217,6 +217,33 @@ public interface SqlUpdate {
*/
SqlUpdate setTimeout(int secs);
+ /**
+ * Set one of more positioned parameters.
+ * + * This is a convenient alternative to multiple calls setParameter(). + * + *
{@code
+ *
+ * String sql = "insert into audit_log (id, name, version) values (?,?,?)";
+ *
+ * Ebean.createSqlUpdate(sql)
+ * .setParams(UUID.randomUUID(), "Hello", 1)
+ * .executeNow();
+ *
+ *
+ * // is the same as ...
+ *
+ * Ebean.createSqlUpdate(sql)
+ * .setParameter(1, UUID.randomUUID())
+ * .setParameter(2, "Hello")
+ * .setParameter(3, 1)
+ * .executeNow();
+ *
+ * }
+ *
+ */
+ SqlUpdate setParams(Object... values);
+
/**
* Set the next positioned parameter.
*
diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java b/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
index 9af2f2af4..7b028fa2b 100644
--- a/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
+++ b/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
@@ -239,6 +239,14 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
return this;
}
+ @Override
+ public SqlUpdate setParams(Object... values) {
+ for (Object value : values) {
+ setParameter(++addPos, value);
+ }
+ return this;
+ }
+
@Override
public SqlUpdate setNextParameter(Object value) {
setParameter(++addPos, value);
diff --git a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
index db4948bcb..5dfcd4398 100644
--- a/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
+++ b/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
@@ -34,6 +34,11 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
private int bufferFetchSizeHint;
+ /**
+ * Helper to add positioned parameters in order.
+ */
+ private int addPos;
+
/**
* Bind parameters when using the query language.
*/
@@ -107,6 +112,14 @@ public class DefaultRelationalQuery implements SpiSqlQuery {
return Optional.ofNullable(findOne());
}
+ @Override
+ public DefaultRelationalQuery setParams(Object... values) {
+ for (Object value : values) {
+ setParameter(++addPos, value);
+ }
+ return this;
+ }
+
@Override
public DefaultRelationalQuery setParameter(int position, Object value) {
bindParams.setParameter(position, value);
diff --git a/src/test/java/org/tests/update/TestSqlUpdateExceptions.java b/src/test/java/org/tests/update/TestSqlUpdateExceptions.java
index 7296811f2..466b1154a 100644
--- a/src/test/java/org/tests/update/TestSqlUpdateExceptions.java
+++ b/src/test/java/org/tests/update/TestSqlUpdateExceptions.java
@@ -9,10 +9,28 @@ import org.junit.Test;
import java.util.UUID;
+import static org.assertj.core.api.Assertions.assertThat;
+
public class TestSqlUpdateExceptions extends BaseTestCase {
private String sql = "insert into uuone (id, name, version) values (?,?,?)";
+ @Test
+ public void simpleInsert() {
+
+ UUID id = UUID.randomUUID();
+
+ Ebean.createSqlUpdate(sql)
+ .setParams(id, "hi", 1)
+ .executeNow();
+
+ UUID foundId = Ebean.createSqlQuery("select id from uuone where id = ?")
+ .setParams(id)
+ .findSingleAttribute(UUID.class);
+
+ assertThat(foundId).isEqualTo(id);
+ }
+
@Test(expected = DuplicateKeyException.class)
public void duplicateKey() {