Browse Source

Polish "Allow batch update to take a KeyHolder"

See gh-28132
pull/31244/head
Stéphane Nicoll 2 years ago
parent
commit
c21a9b94c5
  1. 4
      spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcOperations.java
  2. 4
      spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java
  3. 9
      spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcOperations.java
  4. 30
      spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java

4
spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcOperations.java

@ -1014,9 +1014,11 @@ public interface JdbcOperations { @@ -1014,9 +1014,11 @@ public interface JdbcOperations {
* (may also contain special JDBC-defined negative values for affected rows such as
* {@link java.sql.Statement#SUCCESS_NO_INFO}/{@link java.sql.Statement#EXECUTE_FAILED})
* @throws DataAccessException if there is any problem issuing the update
* @since 6.1
* @see org.springframework.jdbc.support.GeneratedKeyHolder
*/
int[] batchUpdate(PreparedStatementCreator psc, BatchPreparedStatementSetter pss, KeyHolder generatedKeyHolder) throws DataAccessException;
int[] batchUpdate(PreparedStatementCreator psc, BatchPreparedStatementSetter pss,
KeyHolder generatedKeyHolder) throws DataAccessException;
/**
* Execute a batch using the supplied SQL statement with the batch of supplied arguments.

4
spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java

@ -1021,7 +1021,9 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { @@ -1021,7 +1021,9 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
}
@Override
public int[] batchUpdate(final PreparedStatementCreator psc, final BatchPreparedStatementSetter pss, final KeyHolder generatedKeyHolder) throws DataAccessException {
public int[] batchUpdate(final PreparedStatementCreator psc, final BatchPreparedStatementSetter pss,
final KeyHolder generatedKeyHolder) throws DataAccessException {
int[] result = execute(psc, getPreparedStatementCallback(pss, generatedKeyHolder));
Assert.state(result != null, "No result array");

9
spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcOperations.java

@ -556,8 +556,8 @@ public interface NamedParameterJdbcOperations { @@ -556,8 +556,8 @@ public interface NamedParameterJdbcOperations {
int[] batchUpdate(String sql, SqlParameterSource[] batchArgs);
/**
* Execute a batch using the supplied SQL statement with the batch of supplied arguments,
* returning generated keys.
* Execute a batch using the supplied SQL statement with the batch of supplied
* arguments, returning generated keys.
* @param sql the SQL statement to execute
* @param batchArgs the array of {@link SqlParameterSource} containing the batch of
* arguments for the query
@ -566,6 +566,7 @@ public interface NamedParameterJdbcOperations { @@ -566,6 +566,7 @@ public interface NamedParameterJdbcOperations {
* (may also contain special JDBC-defined negative values for affected rows such as
* {@link java.sql.Statement#SUCCESS_NO_INFO}/{@link java.sql.Statement#EXECUTE_FAILED})
* @throws DataAccessException if there is any problem issuing the update
* @since 6.1
* @see org.springframework.jdbc.support.GeneratedKeyHolder
*/
int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generatedKeyHolder);
@ -582,7 +583,9 @@ public interface NamedParameterJdbcOperations { @@ -582,7 +583,9 @@ public interface NamedParameterJdbcOperations {
* (may also contain special JDBC-defined negative values for affected rows such as
* {@link java.sql.Statement#SUCCESS_NO_INFO}/{@link java.sql.Statement#EXECUTE_FAILED})
* @throws DataAccessException if there is any problem issuing the update
* @since 6.1
* @see org.springframework.jdbc.support.GeneratedKeyHolder
*/
int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generatedKeyHolder, String[] keyColumnNames);
int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generatedKeyHolder,
String[] keyColumnNames);
}

30
spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java

@ -400,7 +400,9 @@ public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations @@ -400,7 +400,9 @@ public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations
}
@Override
public int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generatedKeyHolder, String[] keyColumnNames) {
public int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generatedKeyHolder,
@Nullable String[] keyColumnNames) {
if (batchArgs.length == 0) {
return new int[0];
}
@ -416,20 +418,18 @@ public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations @@ -416,20 +418,18 @@ public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations
}
Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, null);
PreparedStatementCreator psc = pscf.newPreparedStatementCreator(params);
return getJdbcOperations().batchUpdate(
psc,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Object[] values = NamedParameterUtils.buildValueArray(parsedSql, batchArgs[i], null);
pscf.newPreparedStatementSetter(values).setValues(ps);
}
@Override
public int getBatchSize() {
return batchArgs.length;
}
},
generatedKeyHolder);
return getJdbcOperations().batchUpdate(psc, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Object[] values = NamedParameterUtils.buildValueArray(parsedSql, batchArgs[i], null);
pscf.newPreparedStatementSetter(values).setValues(ps);
}
@Override
public int getBatchSize() {
return batchArgs.length;
}
}, generatedKeyHolder);
}

Loading…
Cancel
Save