-
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
[JDBC 라이브러리 구현하기 - 1단계] 디노(신종화) 미션 제출합니다. #301
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.
안녕하세요 디노🦖
잠실은 어떤가요..
선릉은 공사 중이라 참 쉽지 않아요..
(추석이라 다행이라고 생각했는데 연휴 끝나고 또 공사가 진행된다고 하네요...😱)
코드 깔끔하게 작성해주셔서 리뷰가 편안했어요. 감사합니다 ㅎㅎ
역시 테코톡 제네릭 발표자답게 제네릭 사용이 멋지네요 👍
코멘트는 궁금한 점과 제안들 위주로 남겼습니다.
이번 단계는 바로 넘어가도 될 것 같아서 머지하겠습니다!
2단계도 화이팅~~👨🎤
p.s. 즐거운 추석 연휴 보내세요!! 연휴 최고 ><
public interface RowMapper<T> { | ||
|
||
T mapRow(final ResultSet rs) throws SQLException; | ||
} |
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는 추상 메소드가 오직 하나인 함수형 인터페이스네요!!
그렇다면 @FunctionalInterface
를 붙이는건 어떨까요?!
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.
아차차.. 잊고 있던 어노테이션이군요.. 감사합니다 오잉 !!!!!!
public UserDao(final DataSource dataSource) { | ||
this.dataSource = dataSource; | ||
this.jdbcTemplate = new JdbcTemplate(dataSource); | ||
} | ||
|
||
public UserDao(final JdbcTemplate jdbcTemplate) { | ||
this.dataSource = null; | ||
this.jdbcTemplate = jdbcTemplate; | ||
} |
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.
오오 DataSource를 받는 생성자도 살려두셨군요 굿굿👍
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); | ||
} | ||
} |
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-with-resources
사용 굿굿👍
현재 Connection
과 PreparedStatement
만을 정리해주고 있는데요!
ResultSet
도 정리해주면 좋을 것 같아용
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을 닫아주지 않으면 생길 수 있는 문제
- 리소스 누수: ResultSet을 닫지 않으면 데이터베이스 서버에서 해당 리소스를 계속 유지하므로 리소스 누수가 발생할 수 있습니다. 이는 시스템 성능에 영향을 미칠 수 있습니다.
- 연결 누수: ResultSet을 닫지 않으면 해당 ResultSet을 만든 Statement나 Connection도 닫지 못할 수 있으며, 이로 인해 연결 누수가 발생할 수 있습니다.
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도 AutoCloseable을 extends 하고 있었군요!
꼼꼼한 지적 감사합니다ㅎㅎ
} | ||
} | ||
|
||
@Nullable |
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.
메서드에 @Nullable
을 붙인 건
'반환값이 null일 수 있다'라는 사실을 명시적으로 하기 위함인가용??
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.
넵넵 맞습니다. sonarLint에서 제안해 주더라구요..!
안녕하세요 오잉! 디노입니다~🦖
잘 지내고 계신가요?
우가를 통해 간간히 소식만 듣고 있네요ㅎㅎ
2단계가 리팩터링이길래 우선 DaoTest만 돌아가는 정도로 구현했습니다!
더도 말고 덜도 말고 한가위만 같아라..
즐거운 추석 연휴 보내세요~🍁🌕