스프링 데이터 JPA = 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트
- CRUD를 처리하기 위한 공통 인터페이스 제공
org.springframework.data.jpa.repository.JpaRepository
- 리포지토리 개발 시, 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해줌
➡️ 데이터 접근 계층을 개발 시, 구현 클래스 없이 인터페이스만 작성해도 개발 완료 가능
스프링 데이터 JPA를 사용하기 위해서는 'spring-data-jpa' 라이브러리가 필요함
스프링 데이터 프로젝트
- 스프링 데이터 JPA는 스프링 데이터 프로젝트의 하위 프로젝트들 중 하나. 이는 다양한 데이터 저장소에 대한 접근을 추상화하여 개발자의 편의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여줌
공통 인터페이스 기능
스프링 데이터 JPA는 간단한 CRUD 기능을 공통으로 처리하는 JpaRepository 인터페이스 제공
사용방법
JpaRepository 인터페이스를 상속받은 후 제네릭에 엔티티 클래스와 엔티티 클래스가 사용하는 식별자 타입을 지정하면 됨
주요 메소드
- save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 수정함
- delete(T) : 엔티티 하나를 삭제함. 내부에서 EntityManager.remove() 호출
- findOne(ID) : 엔티티 하나를 조회함. 내부에서 EntityManager.find() 호출
- getOne(ID) : 엔티티를 프록시로 조회함. 내부에서 EntityManager.getReference() 호출
- findAll(...) : 모든 엔티티 조회. 정렬(Sort)이나 페이징(Pageable) 조건을 파라미터로 제공가능
쿼리 메소드 기능
스프링 데이터 JPA가 제공하는 마법 같은 기능
- 메소드 이름으로 쿼리 생성
- 메소드 이름으로 JPA NamedQuery 호출
- @Query 어노테이션을 사용해서 리포지토리 인터페이스에 쿼리 직접 정의
1. 메소드 이름으로 쿼리 생성
예를 들어, 인터페이스에 'findByEmailAndName(...)' 메소드를 실행하면 스프링 데이터 JPA는 메소드 이름을 분석해서 JPQL 생성 후 실행
2. JPA Named Query
메소드 이름으로 JPA Named 쿼리를 호출하는 기능 제공. JPA Named Query = 쿼리에 이름을 부여해서 사용하는 방법
@NamedQuery 사용
3. @Query 사용
리포지토리 메소드에 직접 쿼리를 정의하는 것 (org.springframework.data.jpa.repository.Query 사용)
이름없는 Named 쿼리 = 실행할 메소드에 정적 쿼리를 직접 작성, 애플리케이션 실행 시점에 문법 오류 발견 가능
파라미터 바인딩
스프링 데이터 JPA는 위치 기반 파라미터 바인딩과 이름 기반 파라미터 바인딩을 모두 지원
- 위치 기반 : select m from Member m where m.username = ?1
- 이름 기반 : select m from Member m where m.username= :name
기본값은 위치 기반인데 파라미터 순서로 바인딩
+++++
정렬 : org.springframework.data.domain.Sort
페이징 : org.springframework.data.domain.Pageable (내부에 sort가 포함되어 있음)
사용자 정의 리포지토리 구현
사용자 정의 인터페이스 작성 → 사용자 정의 인터페이스를 구현한 클래스 작성 (리포지토리 인터페이스 이름 + Impl) → 리포지토리 인터페이스에서 사용자 정의 인터페이스 상속받기
'Java' 카테고리의 다른 글
| TDD로 기능 추가해보기 (0) | 2025.09.24 |
|---|---|
| TDD 시작하기 (0) | 2025.09.09 |
| 나를 위한 클래스와 객체, 상속 부분 내용 정리 (0) | 2023.05.16 |
| 끝말잇기 게임 만들기 (0) | 2023.05.15 |
| 자바 - 반복문과 배열 문제풀기 (0) | 2023.04.08 |