이번에는 JDBC를 통해 이전에 저장한 데이터를 조회하는 기능을 개발해보자.
MemberRepositoryV0 - 회원 조회 추가
public Member findById(String memberId) throws SQLException {
String sql = "select * from member where member_id = ?";
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, memberId);
rs = pstmt.executeQuery();
if (rs.next()) {
Member member = new Member();
member.setMemberId(rs.getString("member_id"));
member.setMoney(rs.getInt("money"));
return member;
} else {
throw new NoSuchElementException("member not fount memberId=" + memberId);
}
} catch (SQLException e) {
log.error("db error", e);
throw e;
} finally {
close(con, pstmt, rs);
}
}
findById() - 쿼리 실행
ResultSet

findById() 에서는 회원 하나를 조회하는 것이 목적이다. 따라서 조회 결과가 항상 1건이므로 while 대신에 if 를 사용한다. 다음 SQL을 보면 PK인 member_id 를 항상 지정하는 것을 확인할 수 있다.
SQL: select * from member where member_id = ?
MemberRepositoryV0Test - 회원 조회 추가
//findById
Member findMember = repository.findById(member.getMemberId());
log.info("findMember={}", findMember);
log.info("member == findMember {}", member == findMember);
log.info("member equals findMember {}", member.equals(findMember));
assertThat(findMember).isEqualTo(member);
실행 결과
MemberRepositoryV0Test - findMember=Member(memberId=memberV0, money=10000)