twocowsong

JPQL 본문

IT/JPA

JPQL

WsCode 2022. 4. 29. 23:03

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

하나 이상의 회원 목록을 조회하는 다음 코드를 자세히 보자

// 목록 조회
List<Member> members =
      em.createQuery("SELECT M FROM Member M", Member.class).getResultList();
System.out.println("members.size= " + members.size());

JPA를 사용하면 객체 중심으로 개발하고 DB에 대한 처리는 JAP에 맡겨야합니다.

 

문제는 검색쿼리입니다.

JPA는 엔티티 객체를 중심으로 개발하므로 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야합니다.

 

애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL을 사용해야 합니다.

JPA는 JPQL이라는 쿼리 언어로 이런 문제를 해결합니다.

 

SQL을 추상화한 JPQL이라는 객체지향 쿼리언어를 JAP는 제공합니다.

JPQL은 SQL문법과 거의 유사하기에 기본 SQL문법을 사용 할 수 있습니다.

 

둘의 가장 큰 차이점은 다음과 같습니다.

 

- JPQL은 엔티티 객체를 대상으로 쿼리합니다. 쉽게 이야기해서 클래스와 필드를 대상으로 쿼리합니다.

- SQL은 DB 테이블 대상으로 쿼리합니다.

 

아래의 내용이 바로 JPQL입니다.

SELECT M FROM Member M

여기서 FROM Member는 회원 엔티티 객체를 말하는것이지 MEMBER테이블이 아닙니다.

JPQL은 DB 테이블을 전혀 알지못합니다.

 

JPQL을 사용하려면 먼저아래와 같이 메소드를 실행해서 쿼리 객체를 생성한 후

쿼리 객체 getResultList() 메소드를 호출하면됩니다.

em.createQuery(JPQL, 반환 타입)
em.createQuery(JPQL, 반환 타입).getResultList();

 

JPA는 JPQL을 분석해서 다음과 같은 적절한 SQL을 만들어 DB에서 데이터를 조회합니다.

SELECT M.ID, M.NAME, M.AGE FROM MEMBER M

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

영속성 컨테스트  (0) 2022.05.01
EntityManagerFactory와 EntityManager  (0) 2022.04.30
JPA - 비즈니스 로직  (0) 2022.04.28
JPA - hibernate.dialect (트랜잭션)  (0) 2022.04.28
JPA - 엔티티 매니저  (0) 2022.04.27