일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- python
- 구조체배열
- nestjs auth
- C언어
- 알고리즘
- 카카오
- AWS
- spring boot
- 컴포넌트스캔
- @Autowired
- Spring
- nestJS
- OpenCV
- 카카오 알고리즘
- 코딩테스트
- 코테
- 해시
- 카카오 코테
- 파이썬
- Nodejs
- 가상면접사례로배우는대규모시스템설계기초
- 프로그래머스
- git
- TypeORM
- thymeleaf
- @Component
- 스프링
- C++
- 시스템호출
- nestjs typeorm
- Today
- Total
공부 기록장 💻
[Spring] 스프링 DB 접근 기술 2 - JdbcTemplate을 이용한 Repository 작성 본문
[Spring] 스프링 DB 접근 기술 2 - JdbcTemplate을 이용한 Repository 작성
dream_for 2023. 1. 17. 14:45인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 정리
스프링 DB 접근 기술 시리즈 정리
스프링 내부 메모리에 접근하여 데이터를 저장하는 MemoryMemberRepository,
H2 Database에 JDBC API를 통해 접근하는 JdbcMemberRepository까지 작성해보았다.
이번에는 Jdbc API를 통해 SQL문을 실행하기 위한 코드를 일일히 작성하지 않고, 조금 더 간단하게 구현이 가능한
JdbcTemplate을 이용한 DB 접근 방법에 대해 알아보도록 하자.
Spring JdbcTemplate 이란?
스프링 JdbcTemplate과 MyBatis는 실무에서 많이 쓰는 라이브러리로, SQL문 작성은 필요로 하되 JDBC API에서 반복되는 코드를 제거하여 사용할 수 있도록 제공하는 라이브러리이다.
JdbcTemplate을 이용해 MemberRepository의 구현체 JdbcTemplateMemberRepository를 만들어보자.
JdbcTemplateMemberRepository
private final 으로 JdbcTemplate 변수를 선언하고, 생성자에서 인자로 받은 DataSource 객체를 JdbcTemplate 에 주입하자.
그리고 생성자가 하나만 존재하는 경우, @Autowired 는 생략이 가능하므로 따로 표기를 하지 않았다.
RowMapper<Member>
이제 쿼리문의 결과로 얻은 데이터베이스의 튜플 셋인 ResultSet 인터페이스에 대한 값을 매핑해주는 RowMapper 인터페이스를 구현해보도록 하자.
Result Set 인터페이스는 쿼리문 실행 결과로 얻게 되는 db의 결과 셋 테이블을 말한다. 아래 설명에 따르면 ResultSet은 각 행의 데이터를 가리키는 커서 포인터를 유지하며, while loop을 통해 iterate할 수 있는 용도로 쓰일 수 있다.
이제 RowMapper<Member> 인터페이스를 구현해보면 다음과 같다. 인자의 ResultSet 객체를 통해 id와 name 값을 받아 각 Member 객체의 id, name의 값을 설정하도록 구현되었다.
RowMapper 인터페이스의 설명을 확인해보면, 이는 ResultSet의 각 로우 데이터들을 매핑해주는 역할을 한다.
위에서 작성한 RowMapper 구현체를 IntelliJ에서 제공하는 Replace with lambda 기능 을 이용하여 람다 함수식으로 변형해보면 다음과 같다.
이제 repository의 각 메서드를 JdbcTemplate을 이용해 구현해보도록 하자.
save()
findById()
위에서 사용된 jdbcTemplate의 query() 메서드의 설명을 보면 다음과 같다.
파라미터로는 rowMapper에 실행할 sql 쿼리문, 그리고 각 행을 매핑할 콜백 rowMapper 인터페이스 구현체, 그리고 where 절로 데이터를 필터링할 인자의 목록을 갖는다.
findByName()
findAll()
Configuration
이제 위에서 작성한 JdbcTemplateMemberRepository 를 DB 메모리에 접근하기 위한 레포지터리로 사용하기 위해서는, SpringConfig에서 memberRepository 메서드에서 반환할 타입으로 설정해주면 된다.
Integration Test
통합 테스트 검증도 성공적으로 수행한 것을 확인할 수 있다.