[내배캠/25일차] TIL - User 테이블 생성 및 CRUD 구현

euphony·2025년 1월 31일
0

내일배움캠프

목록 보기
40/66

✅오늘의 한 일

  • Spring 입문 과제 Lv.3 완료
  • 자바 중급 2편 강의 섹션 10 완료

💻오늘의 학습

Spring 입문 과제 - 일정 관리 앱

Schedule 테이블과 User 테이블을 연결할 때, User 테이블의 CRUD도 다 따로 만들어야 하는지 몰라서 조금 헤멨다. Schedule을 생성할 때 User까지 바로 생성되는 것으로 생각했다가 그렇게 된다면 Schedule 테이블과 User 테이블 모두에 email과 password 필드가 필요할 것 같았다. 튜터님께 여쭤보고나서 User 테이블이 존재하면 역시 CRUD가 필요하다는 것을 알게 되었다.

동적 쿼리를 활용한 Update

  • 동적 쿼리 : 고정된 SQL 문장이 아니라 입력 값에 따라 달라지는 SQL 문을 생성하는 방식. 불필요한 업데이트를 방지하고, 더 유연한 SQL 실행 가능

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());

📝오늘의 회고

설 연휴동안 도전 과제를 모두 끝내고 싶었지만 생각대로 되지 않았다.😞 주말에 모두 끝내봐야할 것 같다.

📌내일의 할 일

  • Spring 입문 과제 Lv.4 ~ 5 완료
  • 트러블 슈팅 작성
  • 자바 중급 2편 섹션11 완료, 정리 시작

0개의 댓글

관련 채용 정보