반응형
이 포스팅에서 작성하는 내용은 자바 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 |