It won't hurt to try

[스프링 입문]21.스프링 JdbcTemplate 본문

JAVA/스프링 입문

[스프링 입문]21.스프링 JdbcTemplate

yongki.doki 2021. 9. 5. 19:52

jdbcTemplate를 설명하려면 이전에 익혔던 순수jdbc와의 비교가 필요하다.

 


save

@Override
public Member save(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;
}

org.springframework.jdbc.core.simple.SimpleJdbcInsert라는 모듈을 사용해서, 

DB에 insert를 한다.

withTableName으로 insert할 테이블 명을 지정해준다.

usingGeneratedKeyColumns을 id로 지정해줘서, id컬럼의 값을 1씩 증가하도록 해준다.

"name": member.getName() 을 통해 name키에 멤버의 이름을 값을 저장해준다.

executeAndReturnKey로 jdbcInsert를 실행하고, key를 리턴받는다.

이때 파라미터로 지정된 new MapSqlParameterSource(parameters)은 sql의 파라미터를 map형식으로 보낼 수 있게 한다.

 

findById

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

jdbcTemplate.query를 사용하면 sql문을 직접 입력할수 있다.

첫번째 파라미터가 sql문자열

두번째 파라미터가 RowMapper<Member> 형태의 함수(rs, rowNum의 파라미터로 구현)

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

세번째 파라미터는 sql문의 입력값


확실히 jdbcTemplate를 사용하고 느낀것은 Connection, PreparedStatement, ResultSet등의 구현을 다 해주기 때문에,

정말 많이 편하다고 느꼈다.

 

그리고 spring에서 jdbcTemplate를 제공하기 때문에 나름 믿고 사용할 수 있다.

300x250
300x250
Comments