[Spring5입문] DB 연동
2021. 9. 14. 18:19ㆍCSE/Spring
1. JDBC 프로그래밍의 단점을 보완하는 스프링
- JDBC API를 이용하면 데이터 처리와 상관없는 코드를 반복적으로 사용하게 된다.
- 구조적인 반복을 줄이기 위한 방법은 템플릿 메서드 패턴과 전략 패턴을 함께 사용하는 것이다.
=> 스프링은 이 두 패턴을 엮은 JdbcTemplate 클래스를 제공한다
- 스프링의 @Transactional 애노테이션을 사용하면 트랜잭션 관리가 쉽다.
2. 예시
public class MemberDao {
private JdbcTemplate jdbcTemplate;
public MemberDao(DataSource dataSource){
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public Member selectByEmail(String email) {
List<Member> results = jdbcTemplate.query(
"select * from MEMBER where EMAIL = ?", new RowMapper<Member>(){
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException{
Member member = new Member(
rs.getString("EMAIL"),
rs.getString("PASSWORD"),
rs.getString("NAME"),
rs.getTimestamp("REGDATE").toLocalDateTime());
member.setId(rs.getLong("ID"));
return member;
}
}, email);
return results.isEmpty() ? null : results.get(0);
}
}
@Configuration
public class AppCtx {
@Bean(destroyMethod = "close")
public DataSource dataSource(){
DataSource ds = new DataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8");
ds.setUsername("spring5");
ds.setPassword("spring5");
ds.setInitialSize(2);
ds.setMaxActive(10);
ds.setTestWhileIdle(true); // 유휴 커넥션 검사
ds.setMinEvictableIdleTimeMillis(1000*60*3); // 최소 유휴 시간 3분
ds.setTimeBetweenEvictionRunsMillis(1000*10); // 10초 주기
return ds;
}
@Bean
public MemberDao memberDao(){
return new MemberDao(dataSource());
}
}
- 위와 같이 MemberDao 클래스의 생성자가 DataSource를 주입받도록 구현한 후, 이를 이용해서 JdbcTemplate을 생성하면 된다.
'CSE > Spring' 카테고리의 다른 글
Spring과 Spring Boot의 차이점 (0) | 2022.01.19 |
---|---|
내가 이해한 기본 MVC 패턴 (계속 추가 예정) (0) | 2022.01.18 |
[Spring5입문] 프록시 생성 방식 (0) | 2021.08.11 |
[Spring5입문] 스프링 AOP (0) | 2021.08.11 |
[Spring5입문] AOP 프로그래밍 기초 (0) | 2021.08.09 |