diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/DefaultJdbcClient.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/DefaultJdbcClient.java index 54f91e911ea3..b6ddda11e2e1 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/DefaultJdbcClient.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/DefaultJdbcClient.java @@ -366,6 +366,14 @@ public BatchSpec entry(Consumer entryConsumer) { return this; } + @Override + public BatchSpec entry(@Nullable Object... values) { + DefaultBatchEntry entry = new DefaultBatchEntry(); + Collections.addAll(entry.indexedParams, values); + addEntry(entry); + return this; + } + @Override public BatchSpec entry(List values) { DefaultBatchEntry entry = new DefaultBatchEntry(); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/JdbcClient.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/JdbcClient.java index 12351cc3ba68..f6427bb761cf 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/JdbcClient.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/simple/JdbcClient.java @@ -407,6 +407,19 @@ interface BatchSpec { */ BatchSpec entry(Consumer entryConsumer); + /** + * Define a batch entry with the given list of positional parameters for + * "?" placeholder resolution. + *

Each element of the list will be bound as a JDBC positional parameter + * with a corresponding JDBC index (i.e. list index + 1). + *

Note that the given list represents the parameters of a single + * entry; see {@link #entries(Object[])} for defining several entries at once. + * @param values the parameter values to bind + * @return this batch specification (for chaining) + * @see #entry(List) + */ + BatchSpec entry(@Nullable Object... values); + /** * Define a batch entry with the given list of positional parameters for * "?" placeholder resolution. diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientIntegrationTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientIntegrationTests.java index d18e06410cf6..12b9f0338ed5 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientIntegrationTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientIntegrationTests.java @@ -155,6 +155,20 @@ void updateWithGeneratedKeysAndKeyColumnNamesUsingNamedParameters() { assertUser(expectedId, firstName, lastName); } + @Test + void batchUpdateWithIndexedParameters() { + int[] rowsAffected = this.jdbcClient.sql(INSERT_WITH_JDBC_PARAMS) + .batch() + .entry("Jane", "Smith") + .entry("John", "Doe") + .update(); + + assertThat(rowsAffected).containsExactly(1, 1); + assertNumUsers(3); + assertUser(1, "Jane", "Smith"); + assertUser(2, "John", "Doe"); + } + @Test void batchUpdateWithIndexedParameterList() { int[] rowsAffected = this.jdbcClient.sql(INSERT_WITH_JDBC_PARAMS)