inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

페브님의 게시글

페브 페브

@rlaekduding4085

수강평 작성수
-
평균평점
-

게시글 1

질문&답변

JdbcTemplateItemRepositoryV1 질문

안녕하세요. 저도 동일한 내용이 궁금했어서, 제가 찾아보고 이해한 내용 공유드려요. 질문에 대한 답은 3번에 있는데 만약 3번이 바로 이해가 안가시면 1,2번을 순서대로 읽으시면 이해하실 수 있을 거예요. 1. 람다 개념 이해 우선은 내용을 이해하기 위해 '익명 클래스와 람다'의 기본 개념을 알아야 합니다. 저는 아래 페이지 내용이 이해하기 쉬웠어요! [자바 무료 강의] [심화] 익명 클래스와 람다 - 코드라떼 ( codelatte.io ) 이 내용을 읽고 "람다 표현식은 인터페이스의 추상메소드를 오버라이드하여 구현하는 것이다."를 이해하시면 될 것 같아요. 2. 람다 표현식이 적용되지 않은 예제로 이해 jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection con) throws SQLException { PreparedStatement pstmt = con.prepareStatement("..."); pstmt.setString(1, member.getEmail()); pstmt.setString(2, member.getPassword()); pstmt.setString(3, member.getName()); return pstmt; } }); 이 코드를 보고 아래 내용을 이해할 수 있으면 됩니다. jdbcTemplate.update 함수는 PreparedStatementCreator 타입을 파라미터로 가진다. ( JdbcTemplate.class 에서도 확인 가능합니다.) PreparedStatementCreator 의 createPreparedStatement 추상 메소드를 오버라이드하여 jdbcTemplate.update 의 파라미터로 전달하고 있는 것이다. createPreparedStatement 추상 메소드의 파라미터가 Connection 이다. 위 코드를 람다 표현식으로 구현한 것이 강의 예제(아래 코드)이다. template.update(connection -> { //자동 증가 키 PreparedStatement ps = connection.prepareStatement(sql, new String[]{"id"}); ps.setString(1, item.getItemName()); ps.setInt(2, item.getPrice()); ps.setInt(3, item.getQuantity()); return ps; }, keyHolder); 3. connection 파라미터가 어디서 전달되는지 JdbcTemplate.class 에서 확인 template.update 함수를 타고 들어가면 람다 표현식을 통해 전달받은 psc 파라미터가 execute() 함수로 전달되는 것을 확인 가능합니다. @Override public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) throws DataAccessException { ... return updateCount(execute(psc, ps -> { execute() 함수로 들어가면 psc 를 전달받아 createPreparedStatement() 함수를 실행하는데, 이 때 connection 을 파라미터로 넘겨주는 부분을 확인 가능합니다! @Nullable private T execute(PreparedStatementCreator psc, PreparedStatementCallback action, boolean closeResources) throws DataAccessException { ... Connection con = DataSourceUtils.getConnection(obtainDataSource()); PreparedStatement ps = null; try { ps = psc.createPreparedStatement(con); // 여기! 이 위치에서 예제에서 구현한 람다 표현식이 실행됩니다. 도움이 되길 바랍니다. 😃

좋아요수
0
댓글수
2
조회수
624