순수 JPA 기반으로 CRUD가 가능한 repository를 만들면 다음과 같다.
save / delete / findAll / findById / count 와 같은 기능들은 어떠한 Entity가 생성되더라도 공통적으로 요구될 수 있는 기능들이다.
이러한 기능들을 Spring에서는 Spring Data JPA 라이브러리로 공통 인터페이스를 설정한다.
이 때 T는 Entity 타입이 되고, ID은 해당 Entity의 PK 타입이 된다.
public interface MemberRepository extends JpaRepository<T, ID> {
}
@Repository
public class MemberJpaRepository {
@PersistenceContext
private EntityManager em;
public Member save(Member member) {
em.persist(member);
return member;
}
public void delete(Member member) {
em.remove(member);
}
public List<Member> findAll() {
return em.createQuery("select m From Member m", Member.class)
.getResultList();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
public long count() {
return em.createQuery("select count(m) From Member m", Long.class)
.getSingleResult();
}
}
JpaRepository<T, ID> 인터페이스의 구조를 다이어그램으로 살펴보면 다음과 같다.
CrudRepositoryd 와 PagingAndSortingRepository 의 모든 메소드를 상속받는데
CrudRepositoryd 는 CRUD 작업을 수행하는 메소드를,
PagingAndSortingRepository 는 페이징과 정렬을 수행하는 메소드를 정의한다.
[주요 특징]
1) 쿼리 메서드 기능
- 메서드 이름을 분석하여 쿼리를 자동으로 생성
2) @Query 어노테이션
- JPQL로 쿼리를 직접 정의할 수 있다.
3) 페이징과 정렬 지원
- findAll(Pageable pageable)
4) 벌크 연산 지원
- 영속성 컨텍스트를 무시하고 DB에 직접 쿼리
→ em.clear() 초기화
'Spring > Spring Data Jpa' 카테고리의 다른 글
6. 스프링 데이터 JPA 분석 (0) | 2024.04.12 |
---|---|
5. 확장 기능 (0) | 2024.04.11 |
4. 쿼리 메소드 기능 (0) | 2024.03.25 |
2. 예제 도메인 모델 (1) | 2024.03.23 |
1. 프로젝트 환경설정 (0) | 2024.03.22 |