It won't hurt to try
[스프링 입문]21.스프링 JdbcTemplate 본문
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
'JAVA > 스프링 입문' 카테고리의 다른 글
[스프링 입문]22.JPA (0) | 2021.09.25 |
---|---|
[스프링 입문]20.스프링 통합 테스트 (0) | 2021.08.29 |
[스프링 입문]19.순수 JDBC (0) | 2021.08.17 |
[스프링 입문]18.H2 데이터베이스 설치 (0) | 2021.08.14 |
[스프링 입문]17.회원 웹 기능 - 조회 (0) | 2021.08.14 |
Comments