728x90
- 순수 jdbc와 동일한 환경설정을 하면 된다.
- JDBC API에서 본 반복 코드 대부분을 제거해 준다
- 단, SQL 같은 경우 똑같이 작성해 주어야 한다.
public class JdbcTemplateMemberRepository implements MemberRepository{
private final JdbcTemplate jdbcTemplate;
//생성자가 딱 하나만 있을경우 @Autowire 를 생략할 수 있다.
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@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;
}
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?",memberRowMapper(),id);
//코드가 순수 jdbc보다 훨씬 줄었다.
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?",memberRowMapper(),name);
//코드가 순수 jdbc보다 훨씬 줄었다.
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member",memberRowMapper());
}
private RowMapper<Member> memberRowMapper(){
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
}
}

- 코드를 수정할 필요 없이 이전 Test를 수행해도 성공한다.
728x90
'스프링 입문' 카테고리의 다른 글
| Ch06. 스프링 DB 접근 기술 - SpringDataJPA (0) | 2021.12.01 |
|---|---|
| Ch06. 스프링 DB 접근 기술 - JPA (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - 스프링 통합 테스트 (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - 순수 JDBC (0) | 2021.12.01 |
| Ch06. 스프링 DB 접근 기술 - H2 데이터베이스 설치 (0) | 2021.12.01 |