주노 님의 블로그

[Spirng] 7. Spring 데이터베이스 연동 - JDBCTemplate 본문

공부/Spring

[Spirng] 7. Spring 데이터베이스 연동 - JDBCTemplate

juno0432 2024. 7. 29. 00:53

시작하기에 앞서

아래 내용은 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근기술에서 발췌한 내용입니다.

 

 

강의자료 일부를 발췌하는건 괜찮다고 하셨다.

무료강의로 지식을 공유해주신 김영한님께 다시한번 감사의 인사를 올리겠습니다

(_ _) (유료도 샀어요!)

 

JDBC 템플릿은 스프링 프레임워크에서 제공하는 데이터 액세스 기술로, JDBC의 복잡함과 반복적인 코드를 줄여준다.

 

 

jdbc템플릿을 이용한 레파지토리를 만들기위에 생성해준다

 

public class JdbcTemplateMemberRepository implements MemberRepository {

    private JdbcTemplate jdbcTemplate;

    //생성자가 하나면 autowired 제거 가능
    public JdbcTemplateMemberRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

jdbc템플릿을 사용하기위해 의존성을 주입받는다

생성자가 하나면 AutoWired를 제거 가능하다

 

@Override
public Optional<Member> findByName(String name) {
    List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);

    return result.stream().findAny();
}
private RowMapper <Member> memberRowMapper(){
    return (rs, rowNum) -> {
        Member member = new Member();
        member.setId((rs.getLong("id")));
        member.setName(rs.getString("name"));
        return member;
    };
}

name을 찾기위한 메서드와

쿼리 결과로 반환된 resultset에서 데이터를 읽어 객체로 반환하는 rowmapper를 구현해준다

회원 조회 메서드는 주어진 이름에 해당하는 회원을 찾기 위해 jdbc템플릿의 query 메서드를 사용한다. 매개변수는 sql쿼리문, 결과를 객체로 매핑할 rowmapper, 그리고 쿼리에 사용될 파라미터이다.

이 메서드는 rowmapper를 이용하여 결과를 자바 객체로 변환한다

 

SimpleJdbcInsert를 이용한 방법도 있다.

    @Override
    public Member save(Member member) {
        // SimpleJdbcInsert를 사용하여 데이터베이스에 회원 정보를 삽입하고 ID를 생성합니다.
        SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");

        // 회원 이름을 매개변수로 설정합니다.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("name", member.getName());

        // 삽입 실행 후 생성된 키를 반환받아 Member 객체에 설정합니다.
        Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
        member.setId(key.longValue());
        return member;
    }

강사님께서 document를 참조하면서 구현하면 쉽게 구현된다 하셨다

 

@Bean
    public MemberRepository memberRepository()
    {
//        return new MemoryMemberRepository();
//        return new JdbcMemberRepository(dataSource);
        return new JdbcTemplateMemberRepository(dataSource);
    }

그리고 spring config에서 리턴값만 바꿔주면 된다

 

 

그리고 이전 포스팅에서 만들어놨던 클래스로 테스트 해본다.