Spring | JpaRepository 이용 | JpaRepository의 메소드 이용


그럼 아래를 참고하여 App.java을 변경하도록 하자.

package com.tuyano.libro.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.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class App {
    private static EntityManager manager;
 
    public static void main(String[] args) {
        //ApplicationContext app = new 
            AnnotationConfigApplicationContext(SampleEntityConfig.class);
        ApplicationContext app = new ClassPathXmlApplicationContext("dbbean.xml");
 
        EntityManagerFactory factory = app.getBean(EntityManagerFactory.class);
        manager = factory.createEntityManager();
        makeDummyData();
         
        // get repository
        SampleEntityRepository repository = app.getBean(SampleEntityRepository.class);
         
        // get list
        List list1 = repository.findByNameLike("%ko");
        System.out.println("*Find By Name*");
        printList(list1);
        List list2 = repository.findByMailEndingWith(".com");
        System.out.println("*Find By Mail*");
        printList(list2);
         
        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.uk"));
        manager.persist(new SampleEntity("taro", "taro@yamada.jp"));
        manager.persist(new SampleEntity("sachiko", "sachico@happy.com"));
        manager.flush();
        transaction.commit();
    }
 
    // print all entity.
    public static void printList(List list) { ...생략... }
}

코드를 보면 간단히 필요한 엔티티를 검색 할 수 있다는 것을 알 수 있다.

name으로 검색

List list1 = repository.findByNameLike("%ko");

검색 결과 :

SampleEntity [id=2, name=hanako, mail=hanako@flower.uk]
SampleEntity [id=4, name=sachiko, mail=sachico@happy.com]

mail로 검색

List list2 = repository.findByMailEndingWith(".com");

검색 결과 :

SampleEntity [id=1, name=tuyano, mail=syoda@tuyano.com]
SampleEntity [id=4, name=sachiko, mail=sachico@happy.com]

findByNameLike("%ko")는 name 값이 “ko"로 끝나는 엔티티가 검색된다. 또한 findByMailEndingWith(“com”)에서는 mail 값이 “.com"으로 끝나는 엔티티가 검색되는 것을 알 수 있다. 제대로 필요한 것만 검색이 가능하다.

여기서 주의 깊게 봤으면 하는 것은 “SampleEntityRepository에는 메소드의 선언을 했을 뿐이다"라는 점이다. 즉, 이러한 메소드에서 실제로 수행하는 처리는 전혀 쓰여 있지 않다는 것이다. 단지 메소드의 선언만으로 제대로 움직이는 메소드가 자동 생성된다.

이것이 JpaRepository의 위력이다. JpaRepository는 미리 정해진 형식의 메소드 이름을 작성하면, 그 이름을 바탕으로 실제로 움직이는 메소드가 자동 생성된다.