Spring Data JPA
- 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듭니다.
- 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어 마치 마법처럼, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다.
- 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다.
- 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 재밌어진다.
- 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어듭니다.
- 따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있습니다.
- 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수
주의: 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술입니다. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습해야 합니다.
1. 스프링 데이터 JPA 회원 리포지토리
- interface가 interface를 받을 때는 implements가 아니라 extends 사용, interface는 다중 상속 가능
- JpaRepository를 상속 받아야함<객체, entitiy의 pk>.
- JpaRepository를 상속받고 있으면 스프링데이터 JPA가 구현체를 자동으로 만들어 스프링 빈에 자동을 등록 시킴.
- 우리는 그것을 가져다 쓰기만 하면 된다.
내부를 자세히 들여다보자
상속받은 JpaRepository 클래스를 살펴보면
- 다음과 같이 이미 save나 findAll같은 기본적인 것들이 제공된다. (공통 인터페이스)
- 따라서 그냥 이것을 가져다 쓰면 되는 것이다.(스프링 빈에 등록까지 시켜주니)
그럼 비지니스 로직에 따라 공통 인터페이스 외의 필요한 메소드는 어떻게 해야하나?
- interface 내부에 다음과 같이 필요한 메소드를 적어주면 스프링 데이터 JPA가 알아서 JPQL를 생성하여 SQL로 번역되어 실행되게 된다.
- 위와 같은 코드가 있다고 한다면
- JPQL : select Member from Member where Member.name =?
- 위와 같은 코드가 있다고 한다면
- 규칙이 있음. findBy+찾을 것, And/ Or 사용 가능
- Name과 ID로 동시에 찾고 싶다면 findByNameAndId(String name, Long id) 이런 식으로
# 참고 #
- 실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다.
- Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다.
- 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 스프링 JdbcTemplate를 사용하면 된다.
반응형
'Spring > Introduction to Spring' 카테고리의 다른 글
AOP 적용 (0) | 2021.02.25 |
---|---|
AOP (0) | 2021.02.24 |
jpa (0) | 2021.02.22 |
JdbcTemplate (0) | 2021.02.20 |
스프링 통합 테스트 (0) | 2021.02.20 |