@PutMapping("/user")
public void updateUser(@RequestBody UserUpdateRequest request){
String readSql = "SELECT * FROM user WHERE id = ?";
boolean isUserNotExist = jdbcTemplate.query(readSql, (rs,rowNum) -> 0, request.getId()).isEmpty();
if(isUserNotExist){
throw new IllegalArgumentException();
}
String sql = "UPDATE user SET name = ? WHERE id = ?";
jdbcTemplate.update(sql, request.getName(), request.getId());
}
삭제 API와 수정API 강의를 듣다 커뮤니티에서 하나의 글을 발견했다.
boolean isUserNotExist = jdbcTemplate.query(readSql, (rs,rowNum) -> 0, request.getId()).isEmpty();
이 부분에서 requst.getId()에서 (rs, rowNum) -> 0과 requsest.getId()의 자리가 바뀌면 왜 안되는지 왜 위치가 이런건지 물어보는 질문이였는데 나도 모르고 몰라서 설명해 줄수 없는 부분이니 한번 강사님의 답변을 찾아보았다.
1. (rs, rowNum) -> 0과 request.getId()의 순서
위에 사용하고 있는 코드는
jdbcTemplate.query()인데 이 코드를 자세히보면
public <T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException {
return result(query(sql, args, new RowMapperResultSetExtractor<>(rowMapper)));
}
이 함수를 볼수있는데 이 함수의 파라미터를 보면
- 첫 번째가 String으로 이루어진 SQL
- 두 번째가 RowMapper(위에 작성한 (rs, rowNum)->0))
- 세 번째가 SQL에 있는 ? 에 들어갈 변수들
즉 위에 코드를 만들어준 개발자가 작성한 코드를 우리가 사용하는 것이기 때문에 파라미터의 순서를 변경할수는 없기 때문이다.
'오답노트' 카테고리의 다른 글
게시판 페이징 처리하기 feat. ORACLE (0) | 2023.06.09 |
---|---|
게시판에서 비밀번호 변경해보기 (0) | 2023.06.07 |
MySQL Reading table information for completion of table 오류 (0) | 2023.06.04 |
정규식 표현 오답노트 (0) | 2023.06.01 |
아이디 입력할 때 4글자 이상 10글자 이하 조건 걸어주기 (0) | 2023.05.31 |
댓글