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 |