스프링 입문 - 스프링 JdbcTemplate
우선 설정은, 순수 Jdbc 를 공부할 때 했던 것과 동일하게 환경설정 하면 된다.
이렇게 해 주었다.
스프링 JdbcTemplate는 MyBatis와 비슷한 라이브러리인데, 이것들은, JDBC API에서의 반복적인 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야 한다.
우선,
JdbCTemplateMemberRepository라는 이름으로 클래스를 생성했다.
그리고 implements MemberRepository를 한다.
그리고 MemberRepository의 메서드를 오버라이딩 한다.
이제 코드를 작성해보자.
먼저, JdbcTemplate이 있어야 한다.
그리고 얘는 인젝션을 받을 수 없기 때문에 DataSource로 인젝션을 받아야 한다.
이렇게 작성해주면 된다.
그리고 참고로,
생성자가 딱 1개만 있으면, 스프링빈으로 등록이 되기때문에 @Autowired를 생략할 수 있다.
위의 코드처럼 작성하면,
스프링이 DataSource를 자동으로 인젝션 해준다.
이번에는 조회하는 쿼리를 먼저 작성해보자.
SELECT * FROM MEMBER WHERE ID = ?
의 결과가 나오는 것을 로우 매퍼라는 것으로 매핑을 해줘야 한다.
JdbcTemplateMemberRepository 밑에 이렇게 RowMapper를 작성해주자.
그런데 이 코드를 람다로 바꿀 수 있다.
opt+enter 를 해서 replacewith lambda를 눌러주자.
이렇게 람다스타일로 바꿔주었다.
이렇게 만든 memberRowMapper()를 아까 만든 findByID가 return할 result의 두번째 파라미터로 넣어준다.
그리고, result로 꺼내면 list로 나오는데,
return result.stream().findAny();를 해서 Optional로 반환한다.
이 코드를 JdBC랑 비교해보면,
좌측처럼 엄청 길었던 코드를 jdbcTemplate를 사용해서 아주 줄이고 줄인 결과라 오른쪽 코드처럼
jdbcTemplate 라이브러리를 사용한 결과이다.
이번에는 save()를 작성해보자.
SimpleJdbcInsert라는 것을 사용하면, 쿼리를 짤 필요가 없다.
테이블명 "member"과, primary key인 "id"와 "name" 을 알고 있기 때문에 INSERT 쿼리를 만들 수 있는데,
SimpleJdbcInsert로인해서 자동으로 INSERT문이 만들어진다.
그리고, excuteAndReturnKey 에서 key를 받고,
해다 key를 가지고 member에다가 setId 해서 key.LongValue()를 넣어주도록 했다.
findByName 같은 경우에는 findById에서 where를 name으로 바꿔주면 된다.
findAll은 아주간단하다.
SELECT * FROM MEMBER WHERE NAME을 하고, memberROwMapper()를 해주면,
객체 생성에 대한 것은 memberRowMapper()에서 콜백으로 정리가 된다.
여기서 쭉 멤버가 생성되서 넘어온다.
이렇게 작성을 완료했다.
이제 조립을 해줄 차례다.
SpringConfig에서
return new JdbcTemplateMemberRepository(dataSource);
를 해주었다.
테스트를 해보자.
우리가, 스프링 통합테스트를 만들어 놓았었다. 물론 DB도 지금은 띄어놓아야 하지만,
매번 Application을 직접 띄어서 검증해볼 필요가 없다.
스프링 통합테스트를 돌려보자.
jdbcTemplate 버전으로 바꾼,
가입과 조회가 DB까지 연동되어 테스트가 성공적으로 통과되었다.
프로덕션이 커지면 테스트코드를 잘 짜는 것이 매우 중요해진다.
작은 버그 하나가 기업에게는 정말 수십억원의 피해로 돌아올 수 있다.
테스트 코드의 중요성을 인식하고 테스트 케이스, 코드를 잘 작성하도록 끊임없이 고민하자.
다음시간에는 쿼리까지 모두 없앨 수 있는 JPA에 대해 알아보자.
'Spring' 카테고리의 다른 글
스프링 입문 - 스프링 데이터 JPA (0) | 2022.05.23 |
---|---|
스프링 입문 - JPA (0) | 2022.05.22 |
스프링 입문 - 스프링 통합 테스트 (0) | 2022.05.22 |
스프링 입문 - 순수 JDBC (0) | 2022.05.20 |
스프링 입문 - H2 데이터베이스 설치 (0) | 2022.05.20 |
댓글
이 글 공유하기
다른 글
-
스프링 입문 - 스프링 데이터 JPA
스프링 입문 - 스프링 데이터 JPA
2022.05.23 -
스프링 입문 - JPA
스프링 입문 - JPA
2022.05.22 -
스프링 입문 - 스프링 통합 테스트
스프링 입문 - 스프링 통합 테스트
2022.05.22 -
스프링 입문 - 순수 JDBC
스프링 입문 - 순수 JDBC
2022.05.20