日期:2014-05-18  浏览次数:20946 次

Spring jdbc 批量更新数据
使用spring封装的jdbc批量进行数据库更新操作,代码如下:

Person类
package com.kedacom.spring;

public class Person {

public int id;
public String name;
public int age;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

操作数据库代码


public void insertPersons(final List<Person> list)
throws CannotGetJdbcConnectionExceptionSQLException {
super.getJdbcTemplate().batchUpdate(INSERT_INTO_PERSON,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement,
int i) throws SQLException {
preparedStatement.setObject(1, list.get(i).getName());
preparedStatement.setObject(2, list.get(i).getAge());
}

@Override
public int getBatchSize() {
return list.Size();
}
});
}

测试代码
	
public void test() {

List<Person> persons = new ArrayList<Person>();
// 生成1000个Person对象
for (int i = 0; i < 1000; i++) {
Person person = new Person();
person.setName("NO" + String.valueOf(i));
person.setAge(i);
persons.add(person);
}
long start = System.currentTimeMillis();
this.insertPersons(persons);
long end = System.currentTimeMillis();
System.out.println("所用时长" + (end - start) + "毫秒");
}


运行结果为:所用时长8784毫秒。



感觉有些郁闷spring批量插入1000条数据,居然要8秒钟的时间··
但是如果将操作数据库代码做如下修改,则执行完成时间能缩短为:0.2秒左右


public void insertPersons(final List<Person> list)
throws CannotGetJdbcConnectionException, SQLException {
                //设置不自动提交
                getConnection().setAutoCommit(false);
super.getJdbcTemplate().batchUpdate(INSERT_INTO_PERSON,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement preparedStatement,
int i) throws SQLException {
preparedStatement.setObject(1, list.get(i).getName());
preparedStatement.setObject(2, list.get(i).getAge());
}

@Override
public int getBatchSize() {
return list.Size();
}
});
                //手动提交
     &nb