순서 기반 파라미터 바인딩 지원
public void update(Long itemId, ItemUpdateDto updateParam) {
String sql = "update item set item_name=?, price=?, quantity=? where id=?";
template.update(sql, updateParam.getItemName(),
updateParam.getPrice(), updateParam.getQuantity(), itemId);
}
public Optional<Item> findById(Long id) {
String sql = "select id, item_name, price, quantity from item where id=?";
try {
Item item = template.queryForObject(sql, itemRowMapper(), id);
return Optional.of(item);
} catch (EmptyResultDataAccessException e) {
return Optional.empty();
}
}
이름 기반 파라미터 바인딩을 지원하기 때문에 순서상관 없이 이름만 동일하면 된다.
public Item save(Item item) {
String sql = "insert into item (item_name, price, quantity) values (:itemName, :price, :quantity)";
SqlParameterSource param = new BeanPropertySqlParameterSource(item);
KeyHolder keyHolder = new GeneratedKeyHolder();
template.update(sql, param, keyHolder);
long key = keyHolder.getKey().longValue();
item.setId(key);
return item;
}
SQL로 INSERT문을 작성하지 않아도 편리하게 데이터 INSERT가 가능하다.
public class JdbcTemplateItemRepositoryV3 implements ItemRepository {
//private final JdbcTemplate template;
private final NamedParameterJdbcTemplate template;
private final SimpleJdbcInsert jdbcInsert;
public Item save(Item item) {
SqlParameterSource param = new BeanPropertySqlParameterSource(item);
Number key = jdbcInsert.executeAndReturnKey(param);
item.setId(key.longValue());
return item;
}
}
JdbcTemplate은 템플릿 콜백 패턴을 사용해서 JDBC를 사용할 때 발생하는 반복적인 작업을 대신 처리해주기 때문에 편리하다는 장점이 있다. JPA 같은 ORM 기술과 함께 SQL을 동시에 사용하려면 JdbcTemplate을 활용하면 된다.
이 글은 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 듣고 정리한 내용입니다.