NamedParameterJdbcTemplate 클래스는 인덱스 기반의 파라미터가 아닌 이름 기반의 파라미터를 설정할 수 있도록 해주는 템플릿 클래스다.
인덱스 기반의 파라미터를 전달받는 물음표를 사용하지 않고 이름 기반의 파라미터를 쿼리에서 사용할 수 있도록 지원한다.
@Repository
public class BoardDao {
private NamedParameterJdbcTemplate jdbc;
// insert
private SimpleJdbcInsert insertAction;
public BoardDao(DataSource dataSource){
this.jdbc = new NamedParameterJdbcTemplate(dataSource);
this.insertAction = new SimpleJdbcInsert(dataSource)
.withTableName("board2")
.usingGeneratedKeyColumns("id"); // 자동생성되는 칼럼(id)이 있을경우
}
생성자를 이용해서 NamedParameterJdbcTemplate에 DataSource를 주입할 수 있다.
public int updateCount(Long id) {
String sql = "update board2 set read_count = read_count + 1 where id = :id";
Map<String, Long> map = Collections.singletonMap("id",id);
return jdbc.update(sql,map);
}
기존 JDBC 프로그램에서는 where id = ? 로 나타냈던 부분이 :id 로 바뀌었다.
바인딩 하는 값을 map에 이름과 값을 저장한다. 위의 코드에서는 id 하나만 있으므로 싱글톤으로 만들었다. 여러 값을 이용하게 되면
Map map = new HashMap();
으로 만들고 하나씩 put 해주어야 한다.
반응형