SimpleJdbcTemplate은 java5 이상 버전에서만 사용할수 있다. JdbcTemplate를 래핑하고 java5의 특징(varargs,autoboxing)을 살려서 구현할수 있다.
JdbcTemplate로 구현할때와 SimpleJdbcTemplate로 구현할때의 클래스를 비교해 보자.
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Actor findActor(long id) {
String sql = "select id, first_name, last_name from T_ACTOR where id = ?";
RowMapper mapper = new RowMapper() {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setId(rs.getLong("id"));
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
};
// notice the cast, the wrapping up of the 'id' argument
// in an array, and the boxing of the 'id' argument as a reference type
return (Actor) jdbcTemplate.queryForObject(sql, mapper, new Object[] {Long.valueOf(id)});
}
SimpleJdbcTemplate를 이용하면 아래와 같다.
// SimpleJdbcTemplate-style...
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public Actor findActor(long id) {
String sql = "select id, first_name, last_name from T_ACTOR where id = ?";
ParameterizedRowMapper<Actor> mapper = new ParameterizedRowMapper<Actor>() {
// notice the return type with respect to Java 5 covariant return types
public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {
Actor actor = new Actor();
actor.setId(rs.getLong("id"));
actor.setFirstName(rs.getString("first_name"));
actor.setLastName(rs.getString("last_name"));
return actor;
}
};
return this.simpleJdbcTemplate.queryForObject(sql, mapper, id);
}
ParameterizedBeanPropertyRowMapper를 이용하여 좀더 단순화 하여 class로 매핑시킬수도 있다.
private SimpleJdbcTemplate simpleJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
public Actor findActor(long id) {
String sql = "select id, first_name, last_name from T_ACTOR where id = ?";
return this.simpleJdbcTemplate.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(Actor.class), id);
}
만약 쿼리 결과값이 기본객체에 해당한다면 다음과 같을 것이다.
return this.simpleJdbcTemplate.queryForObject(sql, String.class, id);
이 역시 Best 방법에 대해서 좀더 생각해 봐야 한다. 이후에 다시 언급하기로 한다.
'이전글(~2009)' 카테고리의 다른 글
[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 |
[SpringJDBC] JdbcTemplate (0) | 2008.08.26 |
댓글을 달아 주세요