-
Notifications
You must be signed in to change notification settings - Fork 300
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1단계 - JDBC 라이브러리 구현하기] 제이(이재윤) 미션 제출합니다. #265
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 제이!
이번 미션에서 만나서 반가워요!
정말 빠르게 구현해주셨네요 👍
간단하게 코멘트 남겼으니 확인해주세요 ㅎㅎ
try (Connection connection = dataSource.getConnection(); | ||
PreparedStatement preparedStatement = connection.prepareStatement(sql)) { | ||
setObjects(args, preparedStatement); | ||
ResultSet resultSet = preparedStatement.executeQuery(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 구현하면서 이 부분을 놓쳤었는데요.
ResultSet
도 마지막에 close
해주면 좋을 것 같아요! (기존 코드에서 해주더라구요!)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
밀리 아니었으면 몰랐을 것 같아요.. 꼼꼼하게 봐주셔서 감사합니다 :)
List<T> results = new ArrayList<>(); | ||
if (resultSet.next()) { | ||
T result = rowMapper.mapToRow(resultSet); | ||
results.add(result); | ||
} | ||
|
||
return results.get(INDEX_OF_OBJECT); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
데이터 하나에 대해서 가져오는 메서드인데 List에 add하는 이유가 있을까요?
그리고 만약 조회했을 때 해당하는 데이터가 없다면 오류가 날 것 같네요! 이에 대한 처리를 해줘야 할 것 같아요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그러네요 ㅎㅎ 단일 값을 반환하는 것이니 그냥 줄 수 있을 것 같습니다.
데이터가 없는 경우 null을 반환하도록 변경했습니다!
이 부분은 고민하고 리팩토링 하면서 Optional과 같은 다른 방법으로 진행해보도록 하겠습니다!
|
||
return results.get(INDEX_OF_OBJECT); | ||
} catch (SQLException e) { | ||
throw new RuntimeException(e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
다른 두 메서드는 DataAccessException
을 던지고 있는데, 이 메서드만 RuntimeException
을 던지네요.
예외를 던지는 기준이 궁금해요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리팩토링 하다가 다른 부분을 안 바꿔줬네요!
DataAccessException
을 보면 RuntimeException
을 extends해서 사용하고 있습니다.
조금 더 명시적이기도하고 다르게 처리할 수 있다고 생각했습니다.
jdbc에서 사용하기 위한 예외라고 생각해서 해당 Exception을 던지자고 생각했습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저도 RuntimeException
보다 명시적이여서 좋은것 같아요👍
저도 바꿔야겠네요 ㅎㅎ
private RowMapper<User> rowMapper() { | ||
return (resultSet) -> new User( | ||
resultSet.getLong("id"), | ||
resultSet.getString("account"), | ||
resultSet.getString("password"), | ||
resultSet.getString("email")); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 그냥 궁금한건데, 예전에 미션을 하면서 보통 RowMapper
를 static final 필드로 갖도록 했었는데 이렇게 메서드로 하신 이유가 있나요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 로직은 똑같아서 큰 의미는 없습니다.. ㅎㅎ 다만 반복해서 사용하니 매번 호출하기보다는 처음에 만들어서 계속 사용하는 static final이 더 적절해보입니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 제이!
리뷰 반영하신 것 확인했습니다 😊
그럼 추석 잘 보내시고 다음 단계도 화이팅입니다!!
안녕하세요 밀리~
기능이 동작되게 JdbcTemplate을 구현해봤습니다.
현재 중복 코드가 조금 있는데, 2단계 리팩토링 진행하면서 리팩토링 하겠습니다.
잘 부탁드립니다 :)