Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

데이터 접근 기술 - 스프링 JdbcTemplate 본문

Spring/Spring 데이터 접근 - 활용 기술

데이터 접근 기술 - 스프링 JdbcTemplate

studyHub 2024. 8. 17. 00:07

JdbcTemplate의 장점

  • 설정의 편리함
    JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정없이 바로 사용할 수 있다.
  • 반복 문제 해결
    JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해준다. 개발자는 SQL을 작성하고, 전달할 파리미터를 정의하고, 응답 값을 매핑하기만 하면 된다.
    그 외 대부분의 반복 작업을 대신 처리해준다.
    - 커넥션 획득
    - statement 를 준비하고 실행
    - 결과를 반복하도록 루프를 실행
    - 커넥션 종료, statement , resultset 종료
    - 트랜잭션 다루기 위한 커넥션 동기화
    - 예외 발생시 스프링 예외 변환기 실행

 

주요 기능

  • JdbcTemplate : 순서 기반 파라미터 바인딩을 지원한다.
  • NamedParameterJdbcTemplate :  이름 기반 파라미터 바인딩을 지원한다. (권장)
  • SimpleJdbcInsert :  INSERT SQL을 편리하게 사용할 수 있다.
  • SimpleJdbcCall :  스토어드 프로시저를 편리하게 호출할 수 있다

 

정리

실무에서 가장 간단하고 실용적인 방법으로 SQL을 사용하려면 JdbcTemplate을 사용하면 된다. JPA와 같은 ORM 기술을 사용하면서 동시에 SQL을 직접 작성해야 할 때가 있는데, 그때도 JdbcTemplate을 함께 사용하면 된다.
그런데 JdbcTemplate의 최대 단점이 있는데, 바로 동적 쿼리 문제를 해결하지 못한다는 점이다. 그리고 SQL을 자바 코드로 작성하기 때문에 SQL 라인이 코드를 넘어갈 때 마다 문자 더하기를 해주어야 하는 단점도 있다.
동적 쿼리 문제를 해결하면서 동시에 SQL도 편리하게 작성할 수 있게 도와주는 기술이 바로 MyBatis 이다.


참고

RowMapper()

데이터베이스의 조회 결과를 객체로 변환할 때 사용한다.

JDBC를 직접 사용할 때 ResultSet 를 사용했던 부분을 떠올리면 된다. 차이가 있다면 다음과 같이 JdbcTemplate이 다음과 같은 루프를 돌려주고, 개발자는 RowMapper 를 구현해서 그 내부 코드만 채운다고 이해하면 된다. 

BeanPropertyRowMapper을 사용하면 클래스를 이용해 간단히 구현할 수 있다.

while(resultSet 이 끝날 때 까지) {
	rowMapper(rs, rowNum) 
}


Item item = template.queryForObject(sql, itemRowMapper(), id);


private RowMapper<Item> itemRowMapper() {
	return (rs, rowNum) -> {
                                Item item = new Item();
                                item.setId(rs.getLong("id"));
                                item.setItemName(rs.getString("item_name"));
                                item.setPrice(rs.getInt("price"));
                                item.setQuantity(rs.getInt("quantity"));
                                return item;
                            };
}


private RowMapper<Item> itemRowMapper() {
	//BeanPropertyRowMapper 는 ResultSet 의 결과를 받아서 자바빈 규약에 맞추어 데이터를 변환한다.
	return BeanPropertyRowMapper.newInstance(Item.class); //camel 변환 지원
}

 

별칭과 관례의 불일치

별칭 as 를 사용해서 SQL 조회 결과의 이름을 변경 가능.

BeanPropertyRowMapper 는 언더스코어 표기법을 카멜로 자동 변환해준다.

 

 

이름 지정 바인딩에서 자주 사용하는 파라미터의 종류는 크게 3가지가 있다.

  • Map
  • SqlParameterSource
    - MapSqlParameterSource
    - BeanPropertySqlParameterSource

 


참고 자료 & 이미지 출처
스프링 DB 2편 - 데이터 접근 기술 (김영한 님)

'Spring > Spring 데이터 접근 - 활용 기술' 카테고리의 다른 글

데이터 접근 기술 - 활용 방안  (2) 2024.09.02
QueryDSL : type-safe Query  (0) 2024.08.31
스프링 데이터 JPA  (0) 2024.08.18
JPA  (0) 2024.08.17
MyBatis  (0) 2024.08.17