[DB] 객체지향 쿼리, JPQL

Cover image

JPQL(Java Persistence Query Language)

JPQL란?

  • 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리입니다.
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않습니다.
  • JPA는 JPQL을 분석한 후 적절한 SQL을 만들어 데이터베이스를 조회합니다.
  • 방언(Dialect)만 변경하면 JPQL을 수정하지 않고 자연스럽게 DB를 변경합니다.
  • 엔티티 객체를 중심으로 개발합니다.

JPQL 사용법

다음과 같이 사용합니다.

String jpql= "select m From Member m where m.name like '%hello%'";

List<Member> result = em.createQuery(jpql, Member.class).getResultList();

해당 코드를 보면 다음을 알 수 있습니다.

  • 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리로 이해하면 됩니다.
  • SQL을 추상화하해서 특정 데이터베이스 SQL에 의존하지 않습니다.
  • JPQL을 한마디로 정의하면 객체 지향 SQL입니다.

예시 문법

select _
from _
[where _]
[groupby _]
[having _]
[orderby _]

신경쓸 요소

  • from에는 객체가 들어갑니다.
  • 엔티티와 속성은 대문자를 구분합니다.
  • JPQL 키워드는 대소문자를 구분하지 않습니다.
  • 엔티티 이름을 사용하며 테이블 이름이 아닙니다.
  • 별칭은 필수 입니다.

결과 조회 API

  • query.getResultList() : 결과가 하나 이상인 경우, 리스트를 반환합니다.
  • query.getSingleResult() : 결과가 정확히 하나, 단일 객체를 반환합니다. (하나가 아니면 예외가 발생합니다.)

출처