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

 

 

 

 

 

 

읽어주셔서 감사합니다.

오개념에 대한 지적은 늘 환영입니다.