[Spring 입문 10] 스프링 DB 접근 기술: 순수 JDBC (tistory.com)
- 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. (간결해진 코드) 하지만 SQL은 직접 작성해야 한다.
- 환경 설정
- build.gradle - jdbc 관련 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
- JdbcTemplateMemberRepository에 의존관계 추가
private final JdbcTemplate jdbcTemplate; //jdbcTemplate은 의존관계를 주입받을 수 없다
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource); //dataSource를 주입받는다
}
[Spring 입문 5] 스프링 빈과 의존관계: 자바 코드로 직접 스프링 빈 등록하기 (tistory.com)
- 스프링 JdbcTemplate 회원 리포지토리
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
//@Autowired //생성자 하나만 있을땐 생략 가능
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 Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
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;
};
}
}
- JdbcTemplate 을 사용하도록 스프링 설정 변경
@Configuration
public class SpringConfig {
private DataSource dataSource;
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
}
- 스프링 컨테이너에 다음과 같이 설정되었다.
- memberController → memberService → JdbcTemplateMemberRepository(dataSource)
- memberRowMapper() 메소드
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;
}
}
}
- return new RowMapper에서 ALT+ENTER, [람다로 바꾸기]로 람다식으로 변경
728x90
반응형
'Spring Tutorial' 카테고리의 다른 글
[Spring 입문 14] 스프링 DB 접근 기술: 스프링 데이터 JPA (0) | 2024.08.04 |
---|---|
[Spring 입문 13] 스프링 DB 접근 기술: JPA (0) | 2024.08.04 |
[Spring 입문 11] 스프링 DB 접근 기술: 스프링 통합 테스트 (0) | 2024.08.03 |
[Spring 입문 8] 웹 MVC 개발: 회원 웹 기능- 조회 (0) | 2024.07.27 |
[Spring 입문7] 웹 MVC 개발: 회원 웹 기능- 등록 (0) | 2024.07.21 |