[Spring] JdbcTemplate

KwangYong·2021년 10월 1일
0

Spring

목록 보기
4/16

스프링 입문

통합 테스트

  • @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.
  • @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다.
    테스트 메소드 각각 마다 실행하고 롤백한다.
    이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다. 반복적 테스트가 가능하다.

-> 단위테스트를 잘 만드는게 통합테스트보다 더 중요하다.

JdbcTemplate

  • 순수 Jdbc와 동일한 환경설정을 하면 된다.
  • 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야 한다.

JdbcTemplate 설명 인용자료 : 잘 설명돼있으니까 확인할것!
JdbcTemplate이란 ?
JDBC API를 이용하려면 DB 연동에 필요한 Connection 객체와 쿼리 실행을 위한 PreparedStatement 객체를 생성해야합니다. 그리고 쿼리 실행 후에는 finally 블록에서 ResultSet, PreparedStatement, Connection타입 객체들을 close() 메서드로 닫습니다. 이 코드들은 DB연동할 때 데이터 처리와는 관계 없는 코드지만 JDBC 프로그래밍을 할 때 구조적으로 반복됩니다. 이 구조를 사용할 때 핵심 코드는 반도 되지 않습니다. 이런 구조적인 반복을 줄이기 위한 방법은 템플릿 메서드 패턴과 전략 패턴을 함께 사용하는 것입니다. 스프링은 이 두 패턴을 엮은 JdbcTemplate 클래스를 제공합니다.

dbcTemplate 클래스는 SELECT 쿼리 실행을 위한 query() 메서드를 제공합니다. 아래 메서드들은 자주 사용되는 쿼리 메서드들입니다.

List<T> query(String sql, RowMapper<T> rowMapper)
List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
List<T> query(String sql, RowMapper<T> rowMapper, Object... args)

query() 메서드는 sql 파라미터로 전달받은 쿼리를 실행하고 RowMapper를 이용해서 ResultSet의 결과를 자바 객체로 변환합니다. <T>는 어떤 타입도 올 수 있다는 것을 의미합니다

쿼리 실행 결과를 자바 객체로 변환할 때 사용하는 RowMapper 인터페이스는 위와 같습니다. RowMapper의 mapRow() 메서드는 SQL 실행 결과로 구한 ResultSet에서 한 행의 데이터를 읽어와 자바 객체로 변환하는 매퍼 기능을 구현합니다.

+RowMapper 인터페이스를 구현한 클래스를 작성할 수도 있지만, 임의 클래스나 람다식으로 RowMapper의 객체를 생성해서 query() 메서드에 전달할 때도 많습니다.

profile
바른 자세로 코딩합니다 👦🏻💻

0개의 댓글