NamedParameterJdbcTemplate treats arrays/Iterables like Collections

Closes gh-22981
This commit is contained in:
Juergen Hoeller
2019-06-11 18:26:40 +02:00
parent 9f92b42d69
commit eeb79c8dde
3 changed files with 31 additions and 16 deletions

View File

@@ -475,11 +475,12 @@ public class NamedParameterJdbcTemplateTests {
@Test
public void testBatchUpdateWithInClause() throws Exception {
@SuppressWarnings("unchecked")
Map<String, Object>[] parameters = new Map[2];
Map<String, Object>[] parameters = new Map[3];
parameters[0] = Collections.singletonMap("ids", Arrays.asList(1, 2));
parameters[1] = Collections.singletonMap("ids", Arrays.asList(3, 4));
parameters[1] = Collections.singletonMap("ids", new Integer[] {3, 4});
parameters[2] = Collections.singletonMap("ids", (Iterable<Integer>) () -> Arrays.asList(5, 6).iterator());
final int[] rowsAffected = new int[] {1, 2};
final int[] rowsAffected = new int[] {1, 2, 3};
given(preparedStatement.executeBatch()).willReturn(rowsAffected);
given(connection.getMetaData()).willReturn(databaseMetaData);
@@ -491,7 +492,7 @@ public class NamedParameterJdbcTemplateTests {
parameters
);
assertThat(actualRowsAffected.length).as("executed 2 updates").isEqualTo(2);
assertThat(actualRowsAffected.length).as("executed 3 updates").isEqualTo(3);
InOrder inOrder = inOrder(preparedStatement);
@@ -503,6 +504,10 @@ public class NamedParameterJdbcTemplateTests {
inOrder.verify(preparedStatement).setObject(2, 4);
inOrder.verify(preparedStatement).addBatch();
inOrder.verify(preparedStatement).setObject(1, 5);
inOrder.verify(preparedStatement).setObject(2, 6);
inOrder.verify(preparedStatement).addBatch();
inOrder.verify(preparedStatement, atLeastOnce()).close();
verify(connection, atLeastOnce()).close();
}