• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

15강 질문

23.03.20 21:50 작성 23.03.20 21:57 수정 조회수 295

1

안녕하세요 선생님.

jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId())에서 (rs, rowNum) -> 0과 request.getId()의 자리가 바뀌면 안 되나요? 왜 위치가 저런 건가요?

그리고 왜 수정은 id 기준이고 삭제는 이름 기준인가요?

답변 1

답변을 작성해보세요.

0

안녕하세요, 화이팅님!! 좋은 질문 주셔서 감사드립니다!! 😊

하나씩 답변 드려 볼게요!!

 

[1. (rs, rowNum) -> 0과 request.getId()의 순서]

현재 저희가 사용하고 있는 코드는 jdbcTemplate.query() 인데요! query 부분에 커서를 대고 ctrl + 클릭 (Mac이시면, command + 클릭) 해보시면 저희가 사용하는 JdbcTemplate 코드를 확인할 수 있습니다!!!

 

image

그럼 아마 이런 함수를 보게 되실거에요! 이 함수의 파라미터를 보시면

  • 첫 번째가 String으로 이루어진 SQL,

  • 두 번째가 RowMapper (저희가 작성한 (rs, rowNum) -> 0 이 RowMapper의 람다식입니다. 익명클래스와 람다식에 대해 더 잘 알고 싶으시면 https://developer-talk.tistory.com/499 와 같은 블로그를 보시는 것도 좋을 것 같아요!!)

  • 마지막 세 번째가 SQL에 있는 ?에 들어갈 변수들입니다.

즉, JdbcTemplate 개발자가 작성한 코드를 저희가 사용하는 입장이기 때문에 파라미터의 순서를 변경할 수는 없습니다.

그리고 JdbcTemplate 개발자가 Object... args 를 제일 마지막에 받도록 한 이유는, 일반적으로 Java의 가변인자가 파라미터의 제일 마지막에 위치하기 때문입니다! 가변인자에 대해 궁금하시다면 https://sleepyeyes.tistory.com/29 를 보셔도 좋습니다!

 

[2. 왜 수정은 id 기준으로 삭제는 name 기준인가]

결론부터 말씀드리자면, 요구사항이 그렇게 정해졌기 때문인데요! 요구사항을 이렇게 정한 이유는, DB의 PK를 기준으로 데이터를 가져오는 것과 DB의 일반 column을 기준으로 데이터를 가져오는 것을 보여드리기 위해서입니다!

JdbcTemplate을 이용할 때도 다르고, Spring Data JPA를 이용할 때도 약간의 차이가 있거든요!

 

또 궁금한 점 생기시면 편하게 질문 주세요~!! 🙏

감사합니다!! 🙇