Search
Duplicate
📒

[스프링 JPA] 02. 공통 인터페이스 기능

상태
완료
수업
JPA
주제
JPA
4 more properties
참고

순수 JPA기반 리포지토리 만들기

NOTE
기존의 JPA기반 레포지토리를 만들어보자!
기본적인 CRUD 구현

JPA기반 CRUD 리포지토리

NOTE

MemberJpaRepository

전체코드

1. Create

public Member save(Member member) { em.persist(member); return member; }
Java
복사

2. Read

// 1개 조회 public Optional<Member> findById(Long id){ Member member = em.find(Member.class, id); return Optional.ofNullable(member); } // 여러개 조회 public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } // 데이터 개수 조회 public long count(){ return em.createQuery("select count(m) from Member m", Long.class) .getSingleResult(); }
Java
복사

3. Update(변경 → 변경감지 사용)

JPA변경은 따로 메서드를 사용하지 않는다.
JPA에서는 EntityManagerEntity의 수정을 감지하고 자동으로 반영해준다.

4. Delete

public void delete(Member member) { em.remove(member); }
Java
복사

스프링 데이터 JPA

NOTE
스프링 데이터 JPA는 자바의 기본 프록시 기술을 사용하여 프록시 객체를 자동으로 주입해준다!
우리가 직접 구현 클래스를 생성하지 않아도 자동으로 만들어줌!
구현 인터페이스에서 JpaRepository를 상속받으면 스프링 데이터 JPA가 자동으로 구현클래스를 만들어서 사용한다!
@Repository 어노테이션 생략 가능
컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리한다.
JPA예외를 스프링 예외로 변환하는 과정도 처리해준다.

공통 인터페이스 적용

NOTE
순수 JPA로 구현한 MemberJpaRepository 대신 스프링 데이터 JPA가 제공하는 공통 인터페이스 사용!

MemberRepository

public interface MemberRepository extends JpaRepository<Member, Long> {}
Java
복사
이렇게만 적어두면 JPA기반으로 했던 레포지토에 있던 기능이 대부분 사용가능함

공통 인터페이스 분석

NOTE

JpaRepository 인터페이스

공통 CRUD 메서드 제공 ( find, findAll, save, delete ..)
제네릭은 <엔티티 타입, 식별자 타입> 설정

공통 인터페이스 구성

제네릭 타입
T : 엔티티
ID : 엔티티의 식별자 타입
S : 엔티티그 자식 타입

주요 메서드

save(S)
새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다
delete(T)
엔티티 하나를 삭제한다.
내부에서 EntityManager.remove() 호출
findById(ID)
엔티티 하나를 조회한다.
내부에서 EntityManager.find() 호출
getOne(ID)
엔티티를 프록시로 조회한다.
내부에서 EntityManager.getReference() 호출
findAll(..)
모든 엔티티를 조회한다.
정렬이나 페이징 조건을 파라미터로 제공 가능하다.