Spring Data JPA에서 레코드를 업데이트하거나 삽입하는 방법
이 글은 당신을 위한 것입니다.
다음 시나리오를 상상해 봅시다.
How To Create A Spring Boot REST API에 대한 이전 기사 중 하나에는 다음과 같은 방법이 있습니다.
public Customer saveCustomer(Customer savedCustomer) {
Customer customer = new Customer();
customer.setFirstName(savedCustomer.getFirstName());
customer.setLastName(savedCustomer.getLastName());
customer.setEmail(savedCustomer.getEmail());
customer.setPhoneNumber(savedCustomer.getPhoneNumber());
return customerRepository.save(savedCustomer);
}
위의 방법은 시나리오 번호 2만 다룹니다.
이 메서드를 리팩터링하여 upsert 작업을 수행할 수 있습니다.
#2 UPSERT 작업이란 무엇입니까?
upsert 작업은 값이 데이터베이스에 이미 있는 경우 기존 행을 업데이트하는 데이터베이스 작업입니다. 그렇지 않으면 새 값을 새 행에 저장합니다.
#삼. UPSERT는 어떻게 하나요?
이렇게 하려면 다음을 수행해야 합니다.
1062 - Duplicate Entry error
를 방지하십시오. email
열을 고유하게 만드십시오.ALTER TABLE customer ADD UNIQUE (email);
save()
데이터베이스에 항목이 있는지 확인하는 메서드 논리. 그렇다면 기존 항목을 업데이트하십시오. 그렇지 않으면 새 항목을 만들어 데이터베이스에 삽입합니다.
public Customer saveCustomer(Customer savedCustomer) {
Customer customer = customerRepository
.findCustomerByEmail(savedCustomer.getEmail());
if(customer != null) {
customer.setFirstName(savedCustomer.getFirstName());
customer.setLastName(savedCustomer.getLastName());
customer.setPhoneNumber(savedCustomer.getPhoneNumber());
} else {
customer = new Customer();
customer.setFirstName(savedCustomer.getFirstName());
customer.setLastName(savedCustomer.getLastName());
customer.setEmail(savedCustomer.getEmail());
customer.setPhoneNumber(savedCustomer.getPhoneNumber());
}
return customerRepository.save(customer);
}
public Optional<Customer> getCustomerByEmail(String email){
Customer customer = customerRepository.findCustomerByEmail(email);
return Optional.ofNullable(customer);
}
#삼. 우편 배달부 테스트
Postman을 통해 이 논리를 테스트해 보겠습니다.
레코드도 데이터베이스에서 업데이트됩니다.
이제 Helena의 전화번호를 다른 번호로 업데이트해 보겠습니다.
데이터베이스에서 Helena의 전화번호가 업데이트되어야 합니다(새 행이 생성되지 않아야 함).
결론
이 기사가 도움이 되었기를 바랍니다.
아래 의견에 질문/의심 사항을 남겨주세요.
다음 시간까지!
추가 읽기:
Reference
이 문제에 관하여(Spring Data JPA에서 레코드를 업데이트하거나 삽입하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maddy/how-to-update-or-insert-a-record-in-spring-data-jpa-2kkk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)