Spring | JpaRepository 이용 | JpaRepository 인터페이스 생성

이전에 기본적인 데이터베이스 액세스 대해 대충 설명을 했었다. 이 때, 데이터의 검색에 대해서는 “JPQL"라는 쿼리 문을 사용 할 수 있다는 것을 설명했었는데 기억하는가?

이 설명을 읽고 본인도 모르게 한숨을 쉰 사람도 분명 많았을 것이다. SQL이라는 것을 보고 싶지 않아서 프레임워크를 사용하려고 했는데, 설마 SQL 같은 것이 있을 거라고는 생각하지 못했을 것이다.

그래도 아직 안심해도 된다. Spring Framework에는 더 똑똑하게 데이터 검색을 할 수 있는 구조가 제대로 준비되어 있다. 그것이 “JpaRepository"라는 것이다.

JpaRepository는 인터페이스이다. 인터페이스에 미리 검색 메소드를 정의 해 두는 것으로, 메소드를 호출하는 것만으로 스마트한 데이터 검색을 할 수 있게 되는 것이다. “결국, 그 메소드 중에는 JPQL를 사용하여 검색 처리를 쓰는 거지 ……“라고 생각했다면 조금 더 참아주기 바란다. 결코 손해가되지 않을 것이다.

우선 JpsRepository 인터페이스를 만들어 보자. com.devkuma.spring.db 패키지에 “SampleEntityRepository.java"라는 파일명으로 소스 코드 파일을 작성하자. 그리고 아래와 같이 인터페이스를 작성하자.

package com.devkuma.spring.db;
 
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface SampleEntityRepository
    extends JpaRepository <SampleEntity, Long> {
}

JpaRepository 인터페이스는 org.springframework.data.jpa.repository 패키지의 “JpaRepository"라는 인터페이스를 상속하여 만든다. 이 인터페이스는 범용적으로 사용한다. 코드를 보면 이런 형태로 쓰여져 있는 것을 알 수 있을 것이다.

public interface 이름 extends JpaRepository <엔티티 ID 유형>

<>안에는 엔티티 클래스 이름과 ID 필드 타입이 지정된다. 주의할 점은 “기본형의 경우, 래퍼 클래스를 지정한다는 점이다. 샘플 SampleEntity 클래스는 long 형을 ID를 지정하고 있기 때문에, 여기에서는 <SampleEntity, Long>라고 작성을 한다.

또 하나 주의해야 할 것은 어노테이션이다. 클래스의 선언 앞에 “@Repository"라는 어노테이션이 붙여져 있다. 그러면 이 인터페이스가 JpaRepository임을 나타낸다. 이는 반드시 붙여 두어야 하는 것이다.