Spring 사용하기 (Coupon_check 백엔드(6-3) - DB Jdbc Template)

김태훈·2022년 12월 31일
0

Spring_CouponCheck

목록 보기
12/14

Jdbc Template는 순수 Jdbc와 동일한 환경설정(properties)를 사용하면 된다.
Jdbc Template 라이브러리는, 직접 Jdbc를 작성했을 때, 반복적인 코드를 대부분 제거한다.
하지만 SQL은 직접 작성한다.

1. 생성자

똑같이 클래스 생성자를 구현하되, 살짝 다르다. (Injection이 불가 => DataSource로 Injection)

private final JdbcTemplate jdbcTemplate;

    public JdbcTemplateRepository(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

2. RowMapper

SQL 쿼리의 결과물을 원하는 형태의 결과값으로 반환할 수 있는 함수이다.

Spring 공식 문서
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

private RowMapper<Member> memberRowMapper(){
        return new RowMapper<Member>() {
            @Override
            public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
                Member member = new Member();
                member.setId(rs.getLong("id"));
                member.setName(rs.getString("name"));
                return member;
            }
        }
    }

이를 lambda expression으로 바꿀 수도 있다고 하므로, 바꾸면 (opt+enter/alt+enter)

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

SQL query를 날릴 때, 파라미터로 해당 함수를 건네주면 된다.

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

3. query를 안짜도 되는 경우

public Member saveMember(Member member) {
        SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
        jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("name", member.getName());
        Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
        member.setId(key.longValue());
        return member;
    };

앞 코드는, Primary-key (id) 랑, 테이블 이름(member), 열 이름 (name)으로 쿼리를 짤 필요 없이 SimpleJdbcInsert에서 알아서 다 처리를 해준다.

4. 마무리

당연히 해당 DB를 SpringConfig에서 바꿔치기 해야겠다.

profile
기록하고, 공유합시다

0개의 댓글