[JPA] 5. JPA에서 리스트를 조회해보자

2022. 4. 5. 23:01· BE/JPA
목차
  1. 1. JPA에서 단일건이 아닌 리스트 조회
  2. 2. JPQL에서 페이징을 해보자
  3. 3. JPQL
반응형

자바 ORM 표준 JPA 프로그래밍

 

 

 

이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.

 

 

1. JPA에서 단일건이 아닌 리스트 조회

우선, MemberInfo 테이블을 아래의 데이터처럼 직접 수정해둔다.

 

리스트를 조회하기 위해서는 JPQL이라는 기능을 이용해야함.

JPQL은 우리가 알고있는 일반적인 쿼리는 아님.

package com.sampleJpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class jpaSelectListMain {
    public static void main(String[] args){
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

       EntityManager em = emf.createEntityManager();
       EntityTransaction et = em.getTransaction();

       et.begin();

       try{
           // MemberInfo 리스트 조회 방법
           // JPQL을 이용함.
           // 쿼리를 보면, 우리가 알고있는 일반적인 쿼리가 아닌 것을 알 수 있음.
           // 멤버인포를 다 가져오라는 뜻.
           List<MemberInfo> memberInfoList = em.createQuery("select m from MemberInfo as m", MemberInfo.class).getResultList();

           for (MemberInfo memberInfo : memberInfoList) {
               System.out.println("아이디 : " + memberInfo.getMemberId() + " / 이름 : " + memberInfo.getMemberName());
           }
           // 정상작동 시, 커밋
           et.commit();

       // 오류 발생 시, 롤백
       } catch(Exception e){
           et.rollback();
       // 성공 / 오류 상관없이 마지막에 거치는 영역
       } finally {
           // EntityManager를 닫아준다.
           em.close();
       }

       emf.close();
    }
}

 

실행 결과

 

 

2. JPQL에서 페이징을 해보자

MemberInfo 테이블이 아래와 같을 때, ROWNUM은 아래와 같다.

ROWNUM MEMBERID MEMBERNAME
0 1 name1
1 2 name2
2 3 name3
3 4 name4

 

* Rownum이 1인 데이터부터 2개를 조회해보는 쿼리는 아래와 같다.

package com.sampleJpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;

public class jpaSelectListMain {
    public static void main(String[] args){
       EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

       EntityManager em = emf.createEntityManager();
       EntityTransaction et = em.getTransaction();

       et.begin();

       try{
           // MemberInfo 리스트 조회 방법
           // JPQL을 이용함.
           // 쿼리를 보면, 우리가 알고있는 일반적인 쿼리가 아닌 것을 알 수 있음.
           // 멤버인포를 다 가져오라는 뜻.
           //List<MemberInfo> memberInfoList = em.createQuery("select m from MemberInfo as m", MemberInfo.class).getResultList();


           // .setFirstResult  : Rownum이 1번 데이터부터 (0부터 존재함)
           // .setMaxResults : 데이터를 2개 조회
           // 이렇게, setFirstResult나, setMaxResults를 사용하면 각자 설정해둔 DBMS 방언이 알아서 매핑되서 쿼리로 생성된다.
           List<MemberInfo> memberInfoList = em.createQuery("select m from MemberInfo as m", MemberInfo.class)
                   .setFirstResult(1)
                   .setMaxResults(2)
                   .getResultList();

           for (MemberInfo memberInfo : memberInfoList) {
               System.out.println("아이디 : " + memberInfo.getMemberId() + " / 이름 : " + memberInfo.getMemberName());
           }
           // 정상작동 시, 커밋
           et.commit();

       // 오류 발생 시, 롤백
       } catch(Exception e){
           et.rollback();
       // 성공 / 오류 상관없이 마지막에 거치는 영역
       } finally {
           // EntityManager를 닫아준다.
           em.close();
       }

       emf.close();
    }
}

 

실행결과

Rownum이 1인 데이터부터 데이터를 2개 가져온 것을 알 수 있다.

 

3. JPQL

- JPA를 사용하게 되면, 결국 객체의 엔티티를 중심으로 개발하게 된다.

- 삽입, 수정, 삭제는 간단하지만 조회할 때는 어떻게 해야할까

 

* JPQL

- 애플리케이션이 필요한 데이터만 DB에서 가져오려면 검색조건이 포함된 SQL이 필요함 → JPQL

- SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 이용

- SQL과 문법 유사. SELECT, FROM, GROUP BY, WHERE, HAVING, JOIN 등 지원

 

JPQL : 엔티티를 대상으로 쿼리

SQL : DB 테이블을 대상으로 쿼리 

 

반응형

'BE > JPA' 카테고리의 다른 글

[JPA] 7. 플러시 & 준영속상태  (0) 2022.04.13
[JPA] 6. 영속성 컨텍스트란?  (0) 2022.04.11
[JPA] 4. JPA 맛보기  (0) 2022.03.31
[JPA] 3. JPA 프로젝트 세팅  (0) 2022.03.26
[JPA] 2. Java Persistence API 란  (0) 2022.03.18
  1. 1. JPA에서 단일건이 아닌 리스트 조회
  2. 2. JPQL에서 페이징을 해보자
  3. 3. JPQL
'BE/JPA' 카테고리의 다른 글
  • [JPA] 7. 플러시 & 준영속상태
  • [JPA] 6. 영속성 컨텍스트란?
  • [JPA] 4. JPA 맛보기
  • [JPA] 3. JPA 프로젝트 세팅
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
김멍목의 개발블로그개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자기 공부
  • 자바공부
  • 프로젝트로 배우는 Vue.js 3
  • 더 자바 Java 8
  • Java to Kotlin
  • Effective Java
  • java 8
  • 전산회계 2급 준비
  • 자기개발
  • 알고리즘공부
  • Oracle
  • 코틀린
  • MongoDB 공부
  • MongoDB with Node.js
  • 이펙티브자바
  • JPA 공부
  • junit5
  • 알고리즘 공부
  • 이펙티브 자바
  • 자바 테스팅 프레임워크
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 자바 공부
  • 코테 공부
  • vue3 공부
  • JPA
  • 자기 개발
  • 코테공부
  • MongoDB 기초부터 실무까지
  • 자기공부
  • 자바 개발자를 위한 코틀린 입문

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[JPA] 5. JPA에서 리스트를 조회해보자
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.