2008. 8. 26. 22:03
이전글(~2009)
SimpleJdbcTemplate를 이용해서 일괄처리를 할수 있는 메서드를 제공하는데 그것이 batchUpdate()메서드이다. 여기서 일괄처리는 여러개의 row를 insert,update,delete하는것을 말한다. 간단히 다음과 같은 예제를 통해서 이해할수 있다.
public class JdbcActorDao implements ActorDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List<Actor> actors) {
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(actors.toArray());
int[] updateCounts = simpleJdbcTemplate.batchUpdate(
"update t_actor set first_name = :firstName, last_name = :lastName where id = :id",batch);
return updateCounts;
}
// ... additional methods
}
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List<Actor> actors) {
SqlParameterSource[] batch = SqlParameterSourceUtils.createBatch(actors.toArray());
int[] updateCounts = simpleJdbcTemplate.batchUpdate(
"update t_actor set first_name = :firstName, last_name = :lastName where id = :id",batch);
return updateCounts;
}
// ... additional methods
}
SqlParameterSourceUtils.createBatch에 각기 다른 도메인 객체 List를 batch 변수에 저장하고 batchUpdate로 한꺼번에 업데이트하는 예제이다. 물론 아래와 같이 "?"를 이용해서 구현할수도 있다.
public class JdbcActorDao implements ActorDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List<Actor> actors) {
List<Object[]> batch = new ArrayList<Object[]>();
for (Actor actor : actors) {
Object[] values = new Object[] {
actor.getFirstName(),
actor.getLastName(),
actor.getId()};
batch.add(values);
}
int[] updateCounts = simpleJdbcTemplate.batchUpdate(
"update t_actor set first_name = ?, last_name = ? where id = ?",batch);
return updateCounts;
}
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public int[] batchUpdate(final List<Actor> actors) {
List<Object[]> batch = new ArrayList<Object[]>();
for (Actor actor : actors) {
Object[] values = new Object[] {
actor.getFirstName(),
actor.getLastName(),
actor.getId()};
batch.add(values);
}
int[] updateCounts = simpleJdbcTemplate.batchUpdate(
"update t_actor set first_name = ?, last_name = ? where id = ?",batch);
return updateCounts;
}
이것은 보통
while (iter.hasNext()) {
jdbcTemplate.update(....);
}
jdbcTemplate.update(....);
}
형식일때 자원을 낭비하지 말고, 효과적으로 사용하라고 만들어 놓은것이다.
'이전글(~2009)' 카테고리의 다른 글
[SpringJDBC] SimpleJdbcInsert (0) | 2008.08.26 |
---|---|
[SpringJDBC] SimpleJdbcTemplate (0) | 2008.08.26 |
[SpringJDBC] Batch (0) | 2008.08.26 |
[SpringJDBC] NamedParameterJdbcTemplate (0) | 2008.08.26 |
[SpringJDBC] JdbcTemplate (0) | 2008.08.26 |
[SpringJDBC] 개요 (0) | 2008.08.26 |
댓글을 달아 주세요