JdbcTemplate

jooog·2022년 6월 6일
0

스프링DB

목록 보기
2/13
post-custom-banner

JdbcTemplate의 주요 기능

🎨 JdbcTemplate

순서 기반 파라미터 바인딩 지원

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();
        }
    }

🎨 NamedParameterJdbcTemplate

이름 기반 파라미터 바인딩을 지원하기 때문에 순서상관 없이 이름만 동일하면 된다.

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;
    }

🎨 SimpleJdbcInsert

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 사용법

JdbcTemplate은 템플릿 콜백 패턴을 사용해서 JDBC를 사용할 때 발생하는 반복적인 작업을 대신 처리해주기 때문에 편리하다는 장점이 있다. JPA 같은 ORM 기술과 함께 SQL을 동시에 사용하려면 JdbcTemplate을 활용하면 된다.

이 글은 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 듣고 정리한 내용입니다.

post-custom-banner

0개의 댓글