/////
Search
Duplicate
2️⃣

스프링 데이터 JPA를 이용한 리포지터리 구현

: 스프링과 JPA를 함께 적용할 때는 스프링 데이터 JPA를 주로 이용한다.
: 스프링 데이터 JPA는 지정한 규칙에 맞게 리포지터리 인터페이스를 정의하면 리포지터리의 구현체를 알아서 만들어 스프링 빈으로 등록해준다.
: 리포지터리 인터페이스를 직접 구현하지 않아도 되기 때문에 개발자는 리포지터리를 쉽게 정의할 수 있다.
: 스프링 데이터 JPA는 다음 규칙에 따라 작성한 인터페이스를 찾아서 인터페이스를 구현한 스프링 빈 객체를 자동으로 등록한다.
org.springframework.data.repository.Repository<T,ID> 인터페이스 상속
T는 엔티티 타입을 지정하고 ID는 식별자 타입을 지정
: Order 엔티티 타입의 식별자가 OrderNo 타입일 때
@Entity @Table(name = "purchase_order") @Access(AccessType.FIELD) public class Order { @EmbeddedId private OrderNo number; // OrderNo가 식별자 타입 }
Java
복사
: Order를 위한 OrderRepository는 다음과 같이 작성할 수 있다.
import org.springframework.data.repository.Repository; import java.util.Optional; public interface OrderRepository extends Repository<Order, OrderNo> { Optional<Order> findById(OrderNo id); void save(Order order); }
Java
복사
: 스프링 데이터 JPA는 OrderRepository를 리포지터리로 인식해서 알맞게 구현한 객체를 스프링 빈으로 등록해준다. OrderRepository가 필요하면 주입받아 사용하기만 하면 되는 것이다.
: 스프링 데이터 JPA를 사용하려면 지정한 규칙에 맞게 메서드를 작성해야 한다. 여기선 기본 규칙만을 소개한다.
: OrderRepository를 기준으로 엔티리를 저장하는 메서드는 다음 중 하나를 사용
Order save(Order entity)
void save(Order entity)
: 식별자로 엔티티를 조회할 때는 findById() 메서드를 사용, 식별자에 해당하는 엔티티가 존재하지 않을 경우 다음 두 메서드 중 첫 번째는 null을 리턴하고 두 번재는 값이 없는 Optional을 리턴한다.
Order findById(OrderNo id)
Optional<Order> findById(OrderNo id)
: 특정 프로퍼티를 이용해서 엔티티를 조회할 때는 findBy프로퍼티이름(프로퍼티 값) 형식의 메서드를 이용, 특정 Orderer 값을 갖는 Order 목록을 모두 조회하는 메서드는 다음과 같이 정의할 수 있다.
List<Order> findByOrderer(Orderer orderer)
: 다음처럼 중첩 프로퍼티도 가능, 이 메서드는 Orderer 객체의 memberId 프로퍼티가 파라미터와 같은 Order 목록을 조회
List<Order> findByOrdererMemberId(MemberId memberId)
: 엔티티를 삭제하는 메서드는 다음 두 형태를 갖는다.
void delete(Order order)
void deleteById(OrderNo id)
: 첫 번째는 삭제할 엔티티를 전달하고 두 번째는 식별자를 이용해서 엔티티를 삭제한다.