Schedule 테이블과 User 테이블을 연결할 때, User 테이블의 CRUD도 다 따로 만들어야 하는지 몰라서 조금 헤멨다. Schedule을 생성할 때 User까지 바로 생성되는 것으로 생각했다가 그렇게 된다면 Schedule 테이블과 User 테이블 모두에 email과 password 필드가 필요할 것 같았다. 튜터님께 여쭤보고나서 User 테이블이 존재하면 역시 CRUD가 필요하다는 것을 알게 되었다.
updateSchedule()
과 마찬가지로 updateUser()
도 다음과 같이 StringBuilder
를 사용해 동적으로 UPDATE
쿼리를 생성했다. 또한 params
리스트에 SQL의 바인딩 값을 저장했다. 여러 조건이 추가될 수 있기 때문에 firstField
플래그를 사용하여 첫 번째 필드인지 여부를 확인했다.
StringBuilder query = new StringBuilder("UPDATE users SET");
List<Object> params = new ArrayList<>();
boolean firstField = true;
다음과 같이 각각의 필드가 존재할 경우를 모두 처리할 수 있다.
if (user.getName() != null) {
query.append(" name = ?");
params.add(user.getName());
firstField = false;
}
if (user.getEmail() != null) {
if (!firstField) query.append(",");
query.append(" email = ?");
params.add(user.getEmail());
}
if (user.getPassword() != null) {
if (!firstField) query.append(",");
query.append(" password = ?");
params.add(user.getPassword());
}
마지막에는 업데이트할 값이 없으면 예외가 발생하도록 한다.
if (params.size() == 1) {
throw new IllegalArgumentException("업데이트할 필드가 없습니다.");
}
그리고 이렇게 동적으로 생성된 쿼리를 실행한다.
return jdbcTemplate.update(query.toString(), params.toArray());
설 연휴동안 도전 과제를 모두 끝내고 싶었지만 생각대로 되지 않았다.😞 주말에 모두 끝내봐야할 것 같다.