스프링 DB 1편 - 데이터 접근 핵심 원리<섹션 1. JDBC 이해>

김성훈·2022년 8월 23일
0

스프링 DB 인프런

목록 보기
5/8
post-thumbnail

findById() - 쿼리 실행

sql : 데이터 조회를 위한 select SQL 준비

rs = pstmt.executeQuery() 데이터를 변경할 때는 executeUpdate() 를 사용하지만, 데이터를 조회할 때는 executeQuery() 를 사용한다.

executeQuery() 는 결과를 ResultSet 에 담아서 반환한다

ResultSet

ResultSet 은 다음과 같이 생긴 데이터 구조이다.

예를 들어서 select member_id, money 라고 지정하면 member_id , money 라는 이름으로 데이터가 저장된다.

참고로 select * 을 사용하면 테이블의 모든 컬럼을 다 지정

ResultSet 내부에 있는 커서( cursor )를 이동해서 다음 데이터를 조회할 수 있다.

rs.next() : 이것을 호출하면 커서가 다음으로 이동한다.
참고로 최초의 커서는 데이터를 가리키고 있지 않기 때문에 rs.next() 를 최초 한번은 호출해야 데이터를 조회할 수 있다.

rs.next() 의 결과가 true 면 커서의 이동 결과 데이터가 있다는 뜻.
rs.next() 의 결과가 false 면 더이상 커서가 가리키는 데이터가 없다는 뜻.

rs.getString("member_id") : 현재 커서가 가리키고 있는 위치의 member_id 데이터를 String
타입으로 반환.
rs.getInt("money") : 현재 커서가 가리키고 있는 위치의 money 데이터를 int 타입으로 반환.

findById() 에서는 회원 하나를 조회하는 것이 목적이다.

따라서 조회 결과가 항상 1건이므로 while 대신에 if 를 사용한다.

다음 SQL을 보면 PK인 member_id₩ 를 항상 지정하는 것을 확인할 수 있다.
SQL: select * from member where member_id = ?

//save
Member member = new Member("memberV0", 10000);
repository.save(member);

//findById
Member findMember = repository.findById(member.getMemberId());
log.info("findMember={}", findMember);
assertThat(findMember).isEqualTo(member);

 // MemberRepositoryV0Test - findMember=Member(memberId=memberV0, money=10000)

회원을 등록하고 그 결과를 바로 조회하였다.

참고로 실행 결과에 member 객체의 참조 값이 아니라 실제 데이터가 보이는 이유는 롬복의 @Data
toString() 을 적절히 오버라이딩 해서 보여주기 때문이다.

isEqualTo() : findMember.equals(member) 를 비교한다

결과가 참인 이유는 롬복의 @Data 는 해당 객체의 모든 필드를 사용하도록 equals() 를 오버라이딩 하기 때문이다.

<출처>

스프링 DB 1편 - 데이터 접근 핵심 원리

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글