블로그 이미지
Max.

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

2008.08.26 22:05 이전글(~2009)
SimpleJdbcInsert 와 SimpleJdbcCall는 메타데이타를 이용해서 해당 작업을 단순화시킨 클래스이다. 먼저 SimpleJdbcInsert 를 보자.

SimpleJdbcInsert 는 먼저 클래스가 초기화 될때 withTableName 메서드를 이용하여 테이블명을 지정하고 입력할 데이터를 Map으로 매핑하면 된다.

public class JdbcActorDao implements ActorDao {
  private SimpleJdbcTemplate simpleJdbcTemplate;
  private SimpleJdbcInsert insertActor;
 
public void setDataSource(DataSource dataSource) {
    this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    this.insertActor = new SimpleJdbcInsert(dataSource).withTableName("t_actor");
  }

  public void add(Actor actor) {
    Map<String, Object> parameters = new HashMap<String, Object>(3);
    parameters.put("id", actor.getId());
    parameters.put("first_name", actor.getFirstName());
    parameters.put("last_name", actor.getLastName());
    insertActor.execute(parameters);
  }
  // ... additional methods
}


또한 자동증가값 필드가 필요하다면 usingGeneratedKeyColumns()메서드를 이용하면 된다.

public class JdbcActorDao implements ActorDao {
private SimpleJdbcTemplate simpleJdbcTemplate;
private SimpleJdbcInsert insertActor;

    public void setDataSource(DataSource dataSource) {
    this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    this.insertActor =
        new SimpleJdbcInsert(dataSource)
        .withTableName("t_actor")
        .usingGeneratedKeyColumns("id");
    }

    public void add(Actor actor) {
    Map<String, Object> parameters = new HashMap<String, Object>(2);
    parameters.put("first_name", actor.getFirstName());
    parameters.put("last_name", actor.getLastName());
    Number newId = insertActor.executeAndReturnKey(parameters);
    actor.setId(newId.longValue());
    }
    // ... additional methods
}


만약 특별한 필드명으로 바꾸고 싶다면, usingColumns()를 이용해서 바꿀수도 있다.

this.insertActor =
new SimpleJdbcInsert(dataSource)
.withTableName("t_actor")
.usingColumns("first_name", "last_name")
.usingGeneratedKeyColumns("id");

SimpleJdbcInsert 역시 Map 대신 도메인 모델 객체를 파라메터로 넘길수 있다.
...
public void add(Actor actor) {
  SqlParameterSource parameters = new BeanPropertySqlParameterSource(actor);
  Number newId = insertActor.executeAndReturnKey(parameters);
  actor.setId(newId.longValue());
}
...


이 경우 도메인 모델 객체가 은닉화되어 어떻게 매핑되는지 알수 없다. 그래서 더욱 편리한 방법을 또 제공하고 있다.
...
public void add(Actor actor) {
   SqlParameterSource parameters = new MapSqlParameterSource()
    .addValue("first_name", actor.getFirstName())
    .addValue("last_name", actor.getLastName());
   Number newId = insertActor.executeAndReturnKey(parameters);
   actor.setId(newId.longValue());
}
...

이런 방법들은 JdbcTemplate 시리즈가 거의 비슷하게 적용되고 있다.
신고

'이전글(~2009)' 카테고리의 다른 글

[서적] 부의 역사  (2) 2008.08.27
[SpringJDBC] SimpleJdbcCall  (0) 2008.08.26
[SpringJDBC] SimpleJdbcInsert  (0) 2008.08.26
[SpringJDBC] SimpleJdbcTemplate  (0) 2008.08.26
[SpringJDBC] Batch  (0) 2008.08.26
[SpringJDBC] NamedParameterJdbcTemplate  (0) 2008.08.26
posted by Max.