[스프링입문] 스프링 db 접근 기술 - 순수JDBC와 JDBCTemplate
김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.
H2 데이터베이스
개발이나 테스트 용도로 가볍고 편리한 DB이고 웹 화면을 제공한다.
설치하기 (맥os 기준)
-
설치 후 압축을 풀기
-
권한 주기: chmod 755 h2.sh
-
실행: ./h2.sh
잠시후 이런 창이 나타난다.
-
데이터베이스 파일을 생성한다.
최초 한번은jdbc:h2:~/test
로 접속하여 db파일을 생성한다.
~/test.mv.db 파일 생성 확인
위와같이 메인에 db파일이 생성되었음을 확인할 수 있다.
→ 이후부터의 접속은jdbc:h2:tcp://localhost/~/test
로 한다.
순수 JDBC
db 연결 환경 설정하기
build.gradle
dependency 추가하기
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
상세한 구현에 대한 이해보다는 옛날에는 이런 방식으로 개발했다 ~ 정도로 이해하면 된다고 하셨다.
인터페이스 구현체의 확장
/SpringConfig
에서 빈 등록하는 한줄만 수정하면 기존의 코드는 하나도 수정할 필요 없이 H2 디비로 갈아끼우기 완성~
@Bean
public MemberRepository memberRepository() {
//return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
개방 - 폐쇄 원칙 (OCP)
: 확장에는 열려있고 수정(변경)에는 닫혀있다.
→ 객체지향에서의 다형성을 잘 활용하면 기능을 완전히 변경할때에도 어플리케이션 동작 코드는 수정할 필요 x
→ 스프링의 DI 사용
스프링 통합 테스트
→ DB까지 연동된 통합 테스트를 해보자.
↔단위테스트 : 순수 자바 코드로 최소한의 단위로 테스트
@SpringBootTest
: 스프링 컨테이너와 테스트를 함께 실행한다.
@Transactional
: 테스트 시작 전에 transaction, 테스트 완료 후 commit을 날리지 않고 rollback하는 annotation
→ db에 데이터가 남지 않으므로 테스트의 반복 수행 가능
Spring JDBC Template
환경 설정
순수 JDBC와 동일한 환경설정
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
→ JDBC API에서의 반복 코드를 대부분 제거
JDBCTemplate 활용해서 Repository 수정하기
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
→ 반복 코드 제거하기
private RowMapper<Member> memberRowMapper() {
return (RowMapper<Member>) (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 MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
Spring JDBC Template
환경 설정
순수 JDBC와 동일한 환경설정
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
→ JDBC API에서의 반복 코드를 대부분 제거
JDBCTemplate 활용해서 Repository 수정하기
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
→ 반복 코드 제거하기
private RowMapper<Member> memberRowMapper() {
return (RowMapper<Member>) (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 MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
출처
김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.
Author And Source
이 문제에 관하여([스프링입문] 스프링 db 접근 기술 - 순수JDBC와 JDBCTemplate), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woo0_hooo/스프링입문-스프링-db-접근-기술저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)