Spring2.5에서 SpringJDBC 사용하기
November 26th, 2007
SpringFramework 2.5의 릴리즈에서 많은 부분이 추가/개선되었지만, SpringJDBC에서도 몇가지 개선/추가가 이루어졌다.
우선 SimpleJdbcTemplate에서 SqlParameterSource의 사용과 SimpleJdbcInsert의 추가가 아닐까 싶다.
SimpleJdbcTemplate는 Java5의 varargs와 autoboxing을 지원하여 (특히 목록을 얻어오는 퀴리의 경우) 캐스팅을 별도로 고민 할 필요가 없긴 한데.
문제는 복잡한 퀴리의 경우 classic placeholder ('?')으로는 불편해서 결국 NamedParameterJdbcTemplate으로 작성하곤 했는데.
SimpleJdbcTemplate에서 SqlParameterSource가 가능하게 되었다.
- String sql = "SELECT id,title,content FROM boards WHERE fl_public = :fl_public ";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("fl_public",fl_public);
List<Board> list = this.simpleJdbcTemplate.query(sql,new ParameterizedRowMapper<Board>() {
public Board mapRow(ResultSet rs, int rowNum) throws SQLException {
Board b = new Board();
b.setId(rs.getLong("id"));
b.setTitle(rs.getString("title"));
b.setContent(rs.getString("content"));
return b;
}
},params - );
사실 SimpleJdbcTemplate이 추가될때 추가되어야 할 기능일지도. (...)
그리고 추가된 부분이 SimpleJdbcInsert,SimpleJdbcCall이다. stored procedure을 잘 사용하지 않아서 패스. SimpleJdbcInsert는 QueryObject[PoEAA(316)]패턴과 비슷하게 쿼리를 객체화 할수 있다고 볼수가 있는데. (물론 접근 스타일은 다르지만.)
- jdbcInsert = new SimpleJdbcInsert(this.dataSource).withTableName("boards");
- Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("id",id);
parameters.put("title", board.getTitle());
parameters.put("content",board.getContent());
jdbcInsert.execute(parameters);
빈의 프로퍼티과 테이블 이름이 잘 맞는다면.
- jdbcInsert = new SimpleJdbcInsert(this.dataSource).withTableName("boards");
- SqlParameterSource parameters = new BeanPropertySqlParameterSource(board);
- jdbcInsert.execute(parameters);
데이터베이스의 시퀀스 키를 얻을수 있지만(executeAndReturnKey(),usingGeneratedKeyColumns()). PgSql에서 지원하지 않는 데이터베이스라고 나와서 패스. -_- (org.springframework.jdbc.core.metadata에 PostgresqlCallMataDataProvider가 없다.)
SimpleJdbcUpdate나 SimpleJdbcSelect는 없고 단지 SimpleJdbcInsert만 나온 이유가 Insert 문이 가장 생성하기 쉽고.
또 개인적인 경험에 따르면 가장 작성할때 오타가 가장 많이 나는 퀴리인 듯 하다. Update문의 경우 key-value 스타일이기 때문에 Insert문보다는 작성하기 수월한 면이 있다는 걸 부정할수 없겠다.
그리고 Spring이 버젼업하면 SimpleJdbcUpdate나 SimpleJdbcSelect가 나와서 ORM이 없는 어둠의 장소,약속의 저편...에도 광명이 찾아오지 않을까? :-)

April 16th, 2008 at 08:30 AM test~
April 16th, 2008 at 08:38 AM 베타에 참여한 거? 할까 하다가 귀찮아서 안했는데…
April 16th, 2008 at 02:27 PM 한번 해봤어요.. :-)
April 16th, 2008 at 02:33 PM ^^
April 16th, 2008 at 02:46 PM 핫! deepblue님…;;;
April 17th, 2008 at 04:27 AM 핫! deepblue님… +_+
April 17th, 2008 at 07:34 AM 핫! ^^;;;;;;;;