개발자 공부 - 인프런 온라인 강의/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[섹션 6. 스프링 DB 접근 기술] 스프링 JdbcTemplate / 인프런 김영한 스프링 입문

easpop 2023. 2. 2. 18:50
728x90
반응형

이번 시간에는 스프링 Jdbc 템플릿에 대해서 알아보는 시간이었다.

 

Jdbc 템플릿과 MyBatis와 같은 라이브러리는 JDBC API에서 본 중복되는 부분을 제거하고 만든 라이브러리이다.

 

JdbcTemplateMemberRepository를 리포지토리 폴더에 생성해준다.

MemberRepository를 implements 해주고, JdbcTemplate을 호출하고 생성자를 만들어준다.

하지만 인젝션을 받을수는 없기 때문에, 파라미터에 DataSource를 넣어서 인젝션 받아준다.

그리고 dataSource를 받아서 jdbcTemplate에 넣어준다.

참고로 생성자가 하나만 있을 경우에는, Autowired 생략도 가능하다~~

 

 

 

 

jdbcTemplate.query는 파라미터로 sql문을 작성하고, 나오는 결과물을 rowmapper로 매핑을 해줘야한다.

 

이렇게 구현을 해주고

RowMapper에다가 커서를 대고 Alt + Enter 단축키를 하면 람다식으로 변경이 가능!

변경 전의 빨간색 네모박스 부분이 람다식으로 바뀌고 난 이후는 위와 같다~~

 

코드 설명은, rs(result set)결과를 멤버로 객체를 매핑한 다음에, member를 리턴을 해준다.

반응형

memberRowMapper 구현을 하고 나서, jdbcTemplate.query의 인자값으로 넣어준다.

jdbcTemplate.query의 두번째 인자값이 rowMapper인데, 이 부분이 조금 이해가 안돼서 인텔리제이의 API 문서를 찾아봤다.

 

rowMapper – a callback that will map one object per row

각 열마다 하나의 객체를 매핑하는 콜백 함수(콜백은 피호출자가 호출자를 다시 호출하는 것)

조금 어려운 개념같다;; 나중에 또 공부해야겠다

 

결론적으로, 이렇게 JdbcTemplate 라이브러리를 사용하면 기존 JDBC의 몇십줄이 되는 코드를 2줄로 줄일수가 있다!

 

SimpleJdbcInsert라는 메소드가 있는데, withTableName으로 테이블 명을 입력하고,

pk로 id를 넣으면 쿼리를 짤 필요가 없이 인서트 문을 만들어준다~~

 

findById 메소드를 살펴보면,

jdbcTemplate.query를 통해서 sql 쿼리를 날리고,

그 결과를 RowMapper를 통해서 매핑을 하고 리스트로 받아서 optional로 바꿔서 반환한다.

 

코드 구현을 다 하고 JDBC 템플릿으로 바꾼 테스트 정상 동작 완료~~

 

강사님이 테스트 코드에 대해서 언급하셨는데,

현업에서 전체 근무하는 시간을 100으로 봤을 때, 60~70%는 테스트 코드를 짜고,

실제 프로덕션 코드에는 30~40%를 쓴다고 한다.

그만큼 테스트 코드 짜는게 중요하다고 한다ㅜㅜㅋㅋㅋㅋ

잘하는 개발자일수록, 테스트를 꼼꼼하게 작성하고 테스트 케이스를 잘 작성한다고 한다!ㅋㅋㅋㅋ

 

 

 

 

아래는 JdbcTemplateMemberRepository 전체 코드~~

728x90
반응형