본문 바로가기
Spring_inflearn/입문

[Spring] inflearn 스프링 입문 - 스프링 DB 접근 기술 4

by clolee 2022. 9. 15.

스프링 JdbcTemplate

 

MyBatis와 비슷한 라이브러리. JDBC API에서의 반복적인 코드를 제거한 라이브러리. sql은 직접 작성해야 함.

 

JdbcTemplate을 써야 함. JdbcTemplate은 injection을 받을 수 있는 것은 아님.

dataSource가 injection받음. 

생성자가 딱 하나만 있으면 스프링 빈으로 등록되면 @Autowired 생략 가능

스프링이 자동으로 dataSource injection 해줌

src/main/java/hello/hellospring/repository/JdbcTemplateMemberRepository.java

public class JdbcTemplateMemberRepository implements MemberRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired // 생략 가능. 생성자 하나.
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    ...
    
}

 

findById()

JdbcMemberRepository에 비해 코드가 두 줄로 짧아짐.

JdbcTemplate 라이브러리를 사용해 코드를 줄임.

    @Override
    public Optional<Member> findById(Long id) {
        List<Member> result = jdbcTemplate.query("select * from where id = ?", memberRowMapper());
        return result.stream().findAny();
    }

 

JdbcTemplate : 디자인 패턴 중 template method pattern이 많이 들어가 있음

 

save()

쿼리를 짤 필요 없음. 테이블 명, pk, name 으로 insert문 만들어줌

 

memberRowMapper()

객체 생성. result set 결과를 객체로 맵핑해 리턴

 

스프링 통합테스트를 만들어 놨으므로 웹 어플리케이션 띄워서 검증할 필요 없음. 통합테스트 돌려보기.

 

intellij - control + r : 마지막에 실행했던 것 다시 실행

 

DB까지 연동한 테스트 성공 (JdbcTemplate 버전)

댓글