스프링 부트 하루만에 배우기
9.4. 책 서비스 클래스에 수정 기능 메소드 추가하기
연서은
2024. 7. 26. 11:41
책 정보를 수정하는 기능은 "책 정보를 읽어서 매개변수로 채운 후 저장"하는 과정입니다. 간단하게 구현해 보겠습니다.
src/main/java > com.yse.dev.book.service > BookService.java
public void update(BookEditDTO bookEditDTO) throws NoSuchElementException {
Book book = this.bookRepository.findById(bookEditDTO.getBookId()).orElseThrow();
book = bookEditDTO.fill(book);
this.bookRepository.save(book);
}
데이터를 데이터베이스에 저장할 때 실행된 SQL 쿼리는 다음과 같습니다.
Hibernate:
update
book
set
insert_date_time=?,
price=?,
title=?
where
book_id=?
Hibernate:
select
book0_.book_id as book_id1_0_0_,
book0_.insert_date_time as insert_d2_0_0_,
book0_.price as price3_0_0_,
book0_.title as title4_0_0_
from
book book0_
where
book0_.book_id=?
첫번째 쿼리는 update 쿼리입니다. update {테이블명} set 컬럼1=값1, 컬럼2=값2 where 조건 형식으로 사용합니다.
즉 실제로 데이터를 수정할 때 사용하게 됩니다.
update
book
set
insert_date_time=?,
price=?,
title=?
where
book_id=?
위 코드는 book 테이블의 데이터 중 book_id 로 특정 행을 지정하고 insert_date_time, price, title 컬럼을 갱신하겠다는 의미가 됩니다.
두번째 쿼리는 select 쿼리입니다.
select 쿼리가 실행되는 건, 데이터베이스에서 자동으로 갱신되는 열(예를 들어 insert_date_time) 의 데이터도 JPA에서는 알아내야 하기 때문에 update 이후 데이터베이스와 동기화를 위해서입니다.