태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


2007/11/26 18:46

Spring2.5에서 SpringJDBC 사용하기

SpringFramework 2.5의 릴리즈에서 많은 부분이 추가/개선되었지만, SpringJDBC에서도 몇가지 개선/추가가 이루어졌다.

우선 SimpleJdbcTemplate에서 SqlParameterSource의 사용과 SimpleJdbcInsert의 추가가 아닐까 싶다.

SimpleJdbcTemplate는 Java5의 varargs와 autoboxing을 지원하여 (특히 목록을 얻어오는 퀴리의 경우) 캐스팅을 별도로 고민 할 필요가 없긴 한데.

문제는 복잡한 퀴리의 경우 classic placeholder ('?')으로는 불편해서 결국 NamedParameterJdbcTemplate으로 작성하곤 했는데.

SimpleJdbcTemplate에서 SqlParameterSource가 가능하게 되었다.


  1. String sql = "SELECT id,title,content FROM boards "+
  2.                                      "WHERE fl_public = :fl_public ";
  3. MapSqlParameterSource params = new MapSqlParameterSource();
  4. params.addValue("fl_public",fl_public);
  5. List<Board> list = this.simpleJdbcTemplate.query(sql,
  6.    new ParameterizedRowMapper<Board>()
  7.   {
          public Board mapRow(ResultSet rs, int rowNum)
  8.           throws SQLException
  9.      {               
  10.          Board b = new Board();               
  11.          b.setId(rs.getLong("id"));               
  12.          b.setTitle(rs.getString("title"));               
  13.          b.setContent(rs.getString("content"));               
  14.          return b;  
  15.      }
      },
  16.   params
  17. );

사실 SimpleJdbcTemplate이 추가될때 추가되어야 할 기능일지도. (...)

그리고 추가된 부분이 SimpleJdbcInsert,SimpleJdbcCall이다. SimpleJdbcCall은 stored procedure을 잘 사용하지 않아서 패스. SimpleJdbcInsert는 QueryObject[PoEAA(316)]패턴과 비슷하게 쿼리를 객체화 할수 있다고 볼수가 있는데. (물론 접근 스타일은 다르지만.)

  1. jdbcInsert = new SimpleJdbcInsert(this.dataSource).withTableName("boards");
  2. Map<String, Object> parameters = new HashMap<String, Object>();
  3. parameters.put("id",id);
  4. parameters.put("title", board.getTitle());
  5. parameters.put("content",board.getContent());
  6. jdbcInsert.execute(parameters);

빈의 프로퍼티과 테이블의 컬럼이름이 잘 맞는다면.

  1. jdbcInsert = new SimpleJdbcInsert(this.dataSource).withTableName("boards");
  2. SqlParameterSource parameters = new BeanPropertySqlParameterSource(board);
  3. jdbcInsert.execute(parameters);

 데이터베이스의 시퀀스 키를 얻을수 있지만(executeAndReturnKey(),usingGeneratedKeyColumns()). PgSql에서 지원하지 않는 데이터베이스라고 나와서 패스. -_- (org.springframework.jdbc.core.metadata에 PostgresqlCallMataDataProvider가 없다.)

SimpleJdbcUpdate나 SimpleJdbcSelect는 없고 단지 SimpleJdbcInsert만 나온 이유가 Insert 문이 가장 생성하기 쉽고.

또 개인적인 경험에 따르면 가장 작성할때 오타가 가장 많이 나는 퀴리인 듯 하다. Update문의 경우 key-value 스타일이기 때문에 Insert문보다는 작성하기 수월한 면이 있다는 걸 부정할수 없겠다.

그리고 Spring이 버젼업하면 SimpleJdbcUpdate나 SimpleJdbcSelect가 나와서 ORM이 없는 어둠의 장소,약속의 저편...에서도 광명이 찾아오지 않을까? :-)






이 글은 스프링노트에서 작성된걸 가지고 티스토리에서 삽질했습니다.

Trackback 0 Comment 4