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

[JDBC 라이브러리 구현하기 - 1단계] 디노(신종화) 미션 제출합니다. #301

Merged
merged 5 commits into from
Sep 28, 2023

Conversation

jjongwa
Copy link
Member

@jjongwa jjongwa commented Sep 28, 2023

안녕하세요 오잉! 디노입니다~🦖

잘 지내고 계신가요?
우가를 통해 간간히 소식만 듣고 있네요ㅎㅎ

2단계가 리팩터링이길래 우선 DaoTest만 돌아가는 정도로 구현했습니다!

더도 말고 덜도 말고 한가위만 같아라..
즐거운 추석 연휴 보내세요~🍁🌕

@jjongwa jjongwa self-assigned this Sep 28, 2023
Copy link

@hanueleee hanueleee left a comment

Choose a reason for hiding this comment

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

안녕하세요 디노🦖
잠실은 어떤가요..
선릉은 공사 중이라 참 쉽지 않아요..
(추석이라 다행이라고 생각했는데 연휴 끝나고 또 공사가 진행된다고 하네요...😱)

코드 깔끔하게 작성해주셔서 리뷰가 편안했어요. 감사합니다 ㅎㅎ
역시 테코톡 제네릭 발표자답게 제네릭 사용이 멋지네요 👍

코멘트는 궁금한 점과 제안들 위주로 남겼습니다.
이번 단계는 바로 넘어가도 될 것 같아서 머지하겠습니다!
2단계도 화이팅~~👨‍🎤

p.s. 즐거운 추석 연휴 보내세요!! 연휴 최고 ><

Comment on lines +6 to +9
public interface RowMapper<T> {

T mapRow(final ResultSet rs) throws SQLException;
}

Choose a reason for hiding this comment

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

RowMapper는 추상 메소드가 오직 하나인 함수형 인터페이스네요!!
그렇다면 @FunctionalInterface를 붙이는건 어떨까요?!

Copy link
Member Author

Choose a reason for hiding this comment

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

아차차.. 잊고 있던 어노테이션이군요.. 감사합니다 오잉 !!!!!!

Comment on lines 26 to 32
public UserDao(final DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}

public UserDao(final JdbcTemplate jdbcTemplate) {
this.dataSource = null;
this.jdbcTemplate = jdbcTemplate;
}

Choose a reason for hiding this comment

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

오오 DataSource를 받는 생성자도 살려두셨군요 굿굿👍

Comment on lines +38 to +53
try (final Connection conn = dataSource.getConnection();
final PreparedStatement pstmt = conn.prepareStatement(sql)
) {
log.debug("query : {}", sql);
setValues(pstmt, objects);
final ResultSet rs = pstmt.executeQuery();
final List<T> list = new ArrayList<>();
while (rs.next()) {
list.add(rowMapper.mapRow(rs));
}
return list;
} catch (SQLException e) {
log.error(e.getMessage(), 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.

try-with-resources 사용 굿굿👍

현재 ConnectionPreparedStatement만을 정리해주고 있는데요!
ResultSet도 정리해주면 좋을 것 같아용

Choose a reason for hiding this comment

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

ResultSet을 닫아주지 않으면 생길 수 있는 문제

  1. 리소스 누수: ResultSet을 닫지 않으면 데이터베이스 서버에서 해당 리소스를 계속 유지하므로 리소스 누수가 발생할 수 있습니다. 이는 시스템 성능에 영향을 미칠 수 있습니다.
  2. 연결 누수: ResultSet을 닫지 않으면 해당 ResultSet을 만든 Statement나 Connection도 닫지 못할 수 있으며, 이로 인해 연결 누수가 발생할 수 있습니다.

Copy link
Member Author

Choose a reason for hiding this comment

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

ResultSet도 AutoCloseable을 extends 하고 있었군요!
꼼꼼한 지적 감사합니다ㅎㅎ

}
}

@Nullable

Choose a reason for hiding this comment

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

메서드에 @Nullable을 붙인 건
'반환값이 null일 수 있다'라는 사실을 명시적으로 하기 위함인가용??

Copy link
Member Author

Choose a reason for hiding this comment

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

넵넵 맞습니다. sonarLint에서 제안해 주더라구요..!

@hanueleee hanueleee merged commit 1c29432 into woowacourse:jjongwa Sep 28, 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