Spring | JpaRepository 이용 | 어플리케이션에서 JpaReposiory을 이용


그럼 JpaRepository를 이용해 보기로 하자.

com.devkuma.spring.db 패키지에 있는 App 클래스를 아래와 같이 고쳐 보자.

package com.devkuma.spring.db;
 
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class App {
    private static EntityManager manager;
     
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("dbbean.xml");
 
        EntityManagerFactory factory = app.getBean(EntityManagerFactory.class);
        manager = factory.createEntityManager();
         
        SampleEntityRepository repository = app.getBean(SampleEntityRepository.class);
 
        // make dummy
        makeDummyData();
         
        // get list
        List list = repository.findAll();
        printList(list);
         
        System.out.println("...ok.");
    }
 
    // create dummy entity data.
    public static void makeDummyData() {
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        manager.persist(new SampleEntity("tuyano", "syoda@tuyano.com"));
        manager.persist(new SampleEntity("hanako", "hanako@flower"));
        manager.persist(new SampleEntity("taro", "taro@yamada"));
        manager.persist(new SampleEntity("sachiko", "sachico@happy"));
        manager.flush();
        transaction.commit();
    }
 
    // print all entity.
    public static void printList(List list) {
        for (Object item : list) {
            System.out.println(item);
        }
    }
}

그리고 실행하자. 그러면 더미로 만들고 있는 모든 엔티티가 표시된다.

여기에서는 먼저 EntityManager로 부터 SampleEntityRepository 인스턴스를 얻는다.

SampleEntityRepository repository =
    app.getBean (SampleEntityRepository.class);

이것으로 Bean을 가져옵니다. dbbean.xml에는 Bean의 정의는 포함되어 있지 않지만, 이렇게 제대로 Bean을 꺼낼 수 있다. 이것도 @Repository 덕분이다.

List list = repository.findAll ();

그리고 “findAll"메소드를 호출해서, 엔티티 목록을 검색한다. “이런 메소드 도대체 어디에 있는거야?“라고 생각한 사람이 있을 것이다. 이는 SampleEntityRepository에서 상속하는 JpaRepository에 준비되어 있기 때문이다.

클래스는 도대체 어디에?

그런데, 여기에 코드를 보고 좀 이상하게 생각한 사람도 있을 것이다. SampleEntityRepository 인터페이스이다. 클래스가 아니다. 그런데 당연한 듯이 Bean을 얻어 오는 것이 가능하다.

JpaRepository는 인터페이스를 준비하기만 하면, 자동으로 클래스를 만들고 Bean을 생성하는 것이다. 필요한 것은 인터페이스 뿐이다.