본문 바로가기
오답노트

쓸데없는 궁금증 코드 자리바꿔보기

by titlejjk 2023. 6. 4.

@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에 있는 ? 에 들어갈 변수들

즉 위에 코드를 만들어준 개발자가 작성한 코드를 우리가 사용하는 것이기 때문에 파라미터의 순서를 변경할수는 없기 때문이다.

 

 

댓글