JPA

스프링 데이터 JPA 란?

쿠카이든 2022. 2. 15. 11:20
728x90

스프링 데이터 JPA 란?

  • Spring framework에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트입니다.
  • CRUD 처리를 위한 공통 인터페이스가 제공됩니다.
  • repository 개발 시, 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현체를 동적으로 생성해서 주입시켜 줍니다.
  • 따라서, 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있습니다.
  • 스프링 데이터 JPA 없이 Repository 개발한 예
@Repository
@RequiredArgsConstructor
public class MemberRepository {
  
  private final EntityManager em;
  
  public void save(Member member) {
    em.persist(member);
  }

  public Member findById(Long id) {
    return em.find(Member.class, id);
  }

  public List<Member> findAll() {
    return em.createQuery("select m from Member m", Member.class)
        .getResultList();
  }

  public List<Member> findByName(String name) {
    return em.createQuery("select m from Member m where m.name = :name", Member.class)
        .setParameter("name", name)
        .getResultList();
  }
}
  • 스프링 데이터 JPA를 사용하여 Repository(findByName 포함) 개발한 예
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByName(String name);
}
  • 스프링 데이터 JPA는 JpaRepository라는 인터페이스를 제공하는데, 여기에 기본적인 CRUD 기능이 모두 제공됨을 알 수 있습니다.
  • 또한, findByName처럼 일반화 하기 어려운 기능도 메서드 이름으로 정확한 JPQL 쿼리를 실행합니다.
  • 장점 - 많은 편리한 기능, 높은 개발 생산성(간단한 쿼리를 실행하는데 너무 많은 상용구 코드를 작성하지 않아도 되므로)
  • 단점 - 스프링 데이터 JPA는 JPA를 사용해서 이런 기능을 제공할 뿐입니다. 결국 JPA 자체를 잘 이해하는 것이 가장 중요합니다(영속성, 준영속성, 페치 조인 등).
728x90

'JPA' 카테고리의 다른 글

(스프링 데이터 JPA) 페이징과 정렬  (0) 2022.02.15
(Spring data JPA) 쿼리 메소드란?  (0) 2022.02.15
QueryDSL 소개  (0) 2022.02.15
페치 조인(fetch join) 의 활용  (0) 2022.02.14
회원등록 API v1, v2 차이  (0) 2022.02.14