Spring Data JPA

이재현·2024년 8월 19일

Spring

목록 보기
5/13

🤍 Spring Data JPA

Spring에서 JPA를 사용할 때 JPA의 구현체들인 Hibernate, EclipseLink, DataNucleus를 직접 다루는 것이 아니다.
이 구현체들을 좀 더 쉽게 사용하고자 추상화시킨 스프링에서 개발한 라이브러리로 Spring에서 JPA를 더 편리하게 사용할 수 있게 도와준다.

Build.graldle에 implementation ‘org.springframework.boot:spring-boot-starter-data-jpa’ 추가

JpaRepository<> 인터페이스만 상속받으면 스프링 데이터가 JPA가 프록시 기술을 사용해서 구현 클래스를 대신 만들어주고, 만든 구현 클래스의 인스턴스를 만들어서 스프링 빈으로 등록한다.

🩵 쿼리 메서드

Spring Data JPA는 인터페이스에 메서드만 적어두면, 메서드 명을 분석해서 JPQL 쿼리를 자동으로 만들고 실행하는 기능을 제공한다.

public interface MemberRepository extends JpaRepository<Member, Long> {
 	List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}

💙 쿼리 메서드 명명규칙

다음과 같은 3가지 요소를 규칙에 따라 결합된 메서드 이름을 Repository 인터페이스에 선언하면 자동구현이 가능하다.

  • 접두사(find … By, read … By, query … By, count … By, get … By)
  • 키워드
  • 필드 이름

메서드 생성 키워드

링크텍스트

🩵 JPQL 직접 사용

쿼리 메서드 기능이 아니라 직접 JPQL을 사용하고 싶을 때는 @Query와 함께 JPQL을 작성할 수 있다.
이때 메서드 이름으로 실행되는 규칙은 무시된다.

public interface SpringDataJpaItemRepository extends JpaRepository<Item, Long> {
//쿼리 메서드 기능
List<Item> findByItemNameLike(String itemName);
 
//쿼리 직접 실행
@Query("select i from Item i where i.itemName like :itemName and i.price <= :price")
List<Item> findItems(@Param("itemName") String itemName, @Param("price") Integer price);
}

이와 같이 JPQL 쿼리 문법으로 작성하고 파라미터로 넘기는 필드는 @Param 어노테이션으로 매칭시켜줘야 한다.

0개의 댓글