1. As we know, it is meaningless to execute batch query.
? ? There is only batchUpdate provided in JdbcTemplate.
/** * @param sql defining an array of SQL statements that will be executed. */ public int[] batchUpdate(final String[] sql); /** * @param sql defining PreparedStatement that will be reused. * @param pss object to set parameters on the PreparedStatement */ public int[] batchUpdate(String sql, final BatchPreparedStatementSetter pss); /** * @param sql the SQL statement to execute * @param batchArgs the List of Object arrays containing the batch of arguments for the query */ public int[] batchUpdate(String sql, List<Object[]> batchArgs); /** * @param sql the SQL statement to execute. * @param batchArgs the List of Object arrays containing the batch of arguments for the query * @param argTypes SQL types of the arguments */ public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes); /** * @param sql the SQL statement to execute. * @param batchArgs the List of Object arrays containing the batch of arguments for the query * @param batchSize batch size * @param pss ParameterizedPreparedStatementSetter to use */ public <T> int[][] batchUpdate(String sql, final Collection<T> batchArgs, final int batchSize, final ParameterizedPreparedStatementSetter<T> pss);
Example:
package edu.xmu.jdbc.dao; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.springframework.jdbc.core.BatchPreparedStatementSetter; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter; import org.springframework.jdbc.core.support.JdbcDaoSupport; import edu.xmu.jdbc.bean.Student; public class BatchDao extends JdbcDaoSupport { public int[] batchExecution() { JdbcTemplate jdbcTemplate = getJdbcTemplate(); String sql = "update student set name='aaa' where id=1"; String sql2 = "update student set name='bbb' where id=2"; String sql3 = "update student set name='ccc' where id=3"; final String[] sqls = new String[] { sql, sql2, sql3 }; return jdbcTemplate.batchUpdate(sqls); } public int[] batchCreate(final List<Student> studentList) { JdbcTemplate jdbcTemplate = getJdbcTemplate(); String sql = "insert into student(name, age) values(?, ?)"; int[] updateCounts = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { public void setValues(PreparedStatement ps, int i) throws SQLException { Student student = studentList.get(i); ps.setString(1, student.getName()); ps.setInt(2, student.getAge()); } public int getBatchSize() { return studentList.size(); } }); return updateCounts; } public int[] batchCreate2(final List<Student> studentList) { JdbcTemplate jdbcTemplate = getJdbcTemplate(); String sql = "insert into student(name, age) values(?, ?)"; List<Object[]> batchArgs = new ArrayList<Object[]>(); for (Student student : studentList) { String name = student.getName(); int age = student.getAge(); Object[] objects = new Object[] { name, age }; batchArgs.add(objects); } return jdbcTemplate.batchUpdate(sql, batchArgs); } public int[] batchCreate3(final List<Student> studentList) { JdbcTemplate jdbcTemplate = getJdbcTemplate(); String sql = "insert into student(name, age) values(?, ?)"; List<Object[]> batchArgs = new ArrayList<Object[]>(); for (Student student : studentList) { String name = student.getName(); int age = student.getAge(); Object[] objects = new Object[] { name, age }; batchArgs.add(objects); } re