Spring | CRUD 기본 | Query로 데이터의 목록 조회


데이터베이스 조작의 기본은 “CRUD"라고 한다. 이전에 더미 데이터 몇개를 저장하여 데이터 목록을 표시하는 예제를 만들었다.

(참고 : Spring Data JPA 이용 - 데이터베이스를 이용해 보자.)

예제를 보면 ‘Create’와 ‘Read’의 기본은 이미 만들어져 있을 것이다. 그럼 어떻게 했는지 살펴 보자.

package com.devkuma.spring.db;
 
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class App {
 
    public static void main(String[] args) {
        ApplicationContext app = new
            AnnotationConfigApplicationContext(SampleEntityConfig.class);
 
        EntityManagerFactory factory = app.getBean(EntityManagerFactory.class);
        EntityManager manager = factory.createEntityManager();
 
        makeDummyData(manager);
 
        // get list
        Query query = manager.createQuery("from SampleEntity");
        List list = query.getResultList();
        printList(list);
 
        System.out.println("...ok.");
    }
 
    public static void makeDummyData(EntityManager manager) { ...생략... }
 
    public static void printList(List list) { ...생략... }
}

먼저 “데이터 목록 가져 오기"이다. 여기에는 “Query"라는 클래스를 이용하고 있다.

Query query = manager.createQuery("from SampleEntity");

이것은 “Query"라는 클래스의 인스턴스를 만들고, 해당 메서드를 호출하여 전체 엔터티 목록을 검색한다. Query라는 것은 SQL 쿼리 문장의 단순화 된 버전과 같은 문장을 사용하여 데이터베이스에 액세스하기 위한 것이다.

인스턴스 생성은 new 대신 “createQuery"라는 메소드를 이용한다. 인수는 “from SampleEntity” 텍스트을 넣었다. 이것이 SampleEntity 엔티티를 모두 취득하는 것을 나타내는 구문이다.

List list = query.getResultList();

이렇게 작성한 Query의 “getResultList"을 호출하면, 가져온 엔티티를 목록으로 얻을 수 있다. 그 다음, l결과 목록(list)에서 부터 차례로 엔티티를 꺼내 처리하면 된다.

createQuery 인수로 어떤 텍스트를 지정하면 어떤 결과를 얻을 수 있을까? 라는 것이 제일 문제이다. 우선 여기에서는 “from 엔티티"라는 형태로 쓰면 그 엔터티 목록을 얻을 수 있다는 사실만 기억하자.