❑ Spring Data JPA
Spring Data JDBC와 Spring Data JPA는 모두 Spring Data라는 프로젝트에서 지원하는 PSA(일관된 서비스 추상화)가 적용되어 있기 때문에 사용법이 거의 동일하다.
Spring Data JPA는 Spring Data 패밀리 기술 중 하나이다.
JPA 기반의 데이터 액세스 기술을 좀 더 쉽게 사용할 수 있게 해준다.
➤ JPA vs Hibernate ORM vs Spring Data JPA
JPA
- 엔터프라이즈 Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해 놓은 표준 스펙(사양 또는 명세, Specification)
Hibernate ORM
- JPA의 표준 스펙을 구현한 구현체, 실제로 사용할 수 있는 API라고 보면 된다.
Spring Data JPA
- JPA 스펙을 구현한 구현체의 API(일반적으로 Hibernate ORM)을 조금 더 쉽게 사용할 수 있도록 해주는 모듈이다.
❑ Repository에 JPA 기능 추가하기
엔티티 클래스들 정의 -> 엔티티 클래스 매핑 -> repository 인터페이스 작성
repository 인터페이스에서 spring data jdbc와 달라진 점 : CrudRepository를 상속하는 대신 JpaRepository를 상속한다.
JpaRepository : CrudRepository보다 JPA에 특화된 더 많은 기능을 포함하고 있다.
▶️ JPQL을 통한 객체 지향 쿼리 사용
- JPA에서는 JPQL이라는 객체 지향 쿼리를 통해 데이터베이스 내의 테이블을 조회할 수 있다.
- JPQL은 엔티티 클래스 객체를 대상으로 객체를 조회하는 방법이다. (데이터베이스의 테이블을 대상으로 조회 x)
- JPQL의 문법을 사용해서 객체를 조회하면 JPA가 내부적으로 JPQL을 분석해서 적절한 SQL을 만든 후 데이터베이스를 조회하고 조회한 결과를 엔티티 객체로 매핑한 뒤 반환한다.
- ‘SELECT c’와 같이 별칭으로 생략한 형태로 사용 가능하다.
▶️ 네이티브 SQL을 통한 조회
- Spring Data JDBC와 JPA는 네이티브 SQL 쿼리를 작성해서 사용할 수 있다.
- nativeQuery 애트리뷰트 값을 true로 설정하면 value 애트리뷰트에 작성한 SQL 쿼리가 적용된다.
➤ Spring Data JDBC와 Spring Data JPA의 @Query 차이
둘다 애너테이션 이름은 같지만 패키지 자체가 다르다.
➡️ Starter 모듈이 둘 다 의존 라이브러리에 포함되어 있는 경우 패키지 경로를 혼동하지 않도록 주의한다.
Spring Data JDBC의 @Query 애너테이션 패키지 경로
import org.springframework.data.jdbc.repository.query.Query
Spring Data JPA의 @Query 애너테이션 패키지 경로
org.springframework.data.jpa.repository.Query
읽어주셔서 감사합니다.
오개념에 대한 지적은 늘 환영입니다.
'TIL(Today I Learned)' 카테고리의 다른 글
7/11 (월) Spring Framework에서의 트랜잭션 처리 (0) | 2022.07.17 |
---|---|
7/8 (금) [Spring MVC] 트랜잭션(Transaction) (0) | 2022.07.16 |
7/6 (수) [Spring MVC] JPA기반 데이터 액세스 계층 2️⃣ - JPA 엔티티(Entity)매핑과 연관관계 매핑 (0) | 2022.07.16 |
7/5 (화) [Spring MVC] JPA 기반 데이터 액세스 계층 1️⃣ - JPA란? (0) | 2022.07.14 |
7/4 (월) [Spring MVC] JDBC 기반 데이터 액세스 계층 2️⃣ (0) | 2022.07.12 |