스프링 데이터 JPA는 JPA를 편리하게 사용할 수 있도록 도와주는 라이브러리다. 'JpaRepository' 인터페이스를 통해서 기본적인 CRUD 기능을 제공하며 공통화가 가능한 기능을 모두 포함하고 있다. 다양한 기능을 제공하지만 그 중에서도 핵심은 공통 인터페이스 기능과 쿼리 메서드 기능이다.
스프링 데이터 JPA가 제공하는 기능을 사용하려면 'JpaRepository' 인터페이스를 상속받아야한다. 'JpaRepository' 인터페이스를 자세히 살펴보면 다양한 기능을 제공하는 것을 확인할 수 있다.
기본적인 CRUD 기능부터 다양한 기능을 제공한다.
JpaRepository를 사용하려면 JpaRepository 인터페이스를 상속받고 제네릭에 관리할 <엔티티, 엔티티ID> 를 주면 된다. 이렇게 JpaRepository 인터페이스만 상속받으면 스프링 데이터 JPA가 프록시 기술을 통해서 구현 클래스를 만들주기 때문에 개발자는 구현클래스를 따로 작성하지 않아도 기본적인 CRUD 기능을 모두 사용할 수 있다.
스프링 데이터 JPA는 인터페이스에 메서드만 적어주면 메서드 이름을 분석해서 자동으로 쿼리를 만들고 실행한다.
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}
하지만 따라야할 규칙이 있으며 조회, COUNT, 삭제 등의 기능을 수행할 때는 일정한 규칙에 따라서 메서드 이름을 지정해주어야 한다. 스프링 공식문서에서 다양한 규칙을 확인할 수 있다.
쿼리 메서드 기능 대신 직접 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);
}
이 글은 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 듣고 정리한 내용입니다.