Skip to content
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

Merged
merged 4 commits into from
Sep 27, 2023

Conversation

sosow0212
Copy link

안녕하세요 밀리~

기능이 동작되게 JdbcTemplate을 구현해봤습니다.
현재 중복 코드가 조금 있는데, 2단계 리팩토링 진행하면서 리팩토링 하겠습니다.

잘 부탁드립니다 :)

Copy link

@miseongk miseongk left a 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();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 구현하면서 이 부분을 놓쳤었는데요.
ResultSet도 마지막에 close 해주면 좋을 것 같아요! (기존 코드에서 해주더라구요!)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

밀리 아니었으면 몰랐을 것 같아요.. 꼼꼼하게 봐주셔서 감사합니다 :)

Comment on lines 50 to 56
List<T> results = new ArrayList<>();
if (resultSet.next()) {
T result = rowMapper.mapToRow(resultSet);
results.add(result);
}

return results.get(INDEX_OF_OBJECT);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

데이터 하나에 대해서 가져오는 메서드인데 List에 add하는 이유가 있을까요?
그리고 만약 조회했을 때 해당하는 데이터가 없다면 오류가 날 것 같네요! 이에 대한 처리를 해줘야 할 것 같아요.

Copy link
Author

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);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다른 두 메서드는 DataAccessException을 던지고 있는데, 이 메서드만 RuntimeException을 던지네요.
예외를 던지는 기준이 궁금해요!

Copy link
Author

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을 던지자고 생각했습니다!

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 RuntimeException보다 명시적이여서 좋은것 같아요👍
저도 바꿔야겠네요 ㅎㅎ

Comment on lines 46 to 51
private RowMapper<User> rowMapper() {
return (resultSet) -> new User(
resultSet.getLong("id"),
resultSet.getString("account"),
resultSet.getString("password"),
resultSet.getString("email"));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이건 그냥 궁금한건데, 예전에 미션을 하면서 보통 RowMapper를 static final 필드로 갖도록 했었는데 이렇게 메서드로 하신 이유가 있나요??

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사실 로직은 똑같아서 큰 의미는 없습니다.. ㅎㅎ 다만 반복해서 사용하니 매번 호출하기보다는 처음에 만들어서 계속 사용하는 static final이 더 적절해보입니다!

Copy link

@miseongk miseongk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 제이!
리뷰 반영하신 것 확인했습니다 😊
그럼 추석 잘 보내시고 다음 단계도 화이팅입니다!!

@miseongk miseongk merged commit f435014 into woowacourse:sosow0212 Sep 27, 2023
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants