반응형
이 글은 인프런의 김영한 강사님의 스프링 입문- 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술의 강의 내용을 바탕으로 작성되었습니다.
JDBC Template를 적용한다면 중복된 코드 줄어들고, 직접 쿼리문을 작성하여 코드가 많이 줄어든다.
Repository 폴더에서 JdbcTemplateMEmberReposityory 클래스를 생성해주고 아래와 같이 JDBC 탬플릿 코드를 작성해 준다.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
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);
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
@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;
};
}
}
그 다음 SpringConfig 클래스로 가서 레파짓 토리 빈을 변경해준다
@Bean
public MemberRepository memberRepository(){
return new JdbcTemplateMemberRepository(dataSource);
}
이후에 테스트 코드를 돌려보면
성공 된것을 확인 할 수 있다.
반응형
'spring > spring 기초' 카테고리의 다른 글
[spring] 스프링 입문 - > AOP (0) | 2023.11.04 |
---|---|
[spring] 스프링 입문 - > JPA (1) | 2023.10.31 |
[spring] 스프링 입문 - >통합 테스트 (0) | 2023.10.26 |
[spring] 스프링 입문 - >순수 JDBC (0) | 2023.10.26 |
[spring] 스프링 입문 - >H2 데이터베이스 설치 (0) | 2023.10.24 |