HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🍀
Spring
/
🎋
JPQL
🎋

JPQL

태그

JPQL

  • 가장 단순한 조회 방법
      1. EntityManager.find()
  • 객체 그래프 탐색(a.getB())
  • JPA를 사용하면 엔티티 객체를 중심을 개발
  • 문제는 검색 쿼리다....
  • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다.
  • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.
  • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 필요한 SQL이 필요하다.

JPQL

  • JPA는 SQL을 추상화한 JPQL이라는 객체지향 쿼리 언어 제공
  • SQL 문법과 유사하다.
  • JPQL은 엔티티 대상으로 쿼리를 날린다.
  • SQL은 데이터베이스 테이블 대상으로 쿼리를 날린다.

JPA Criteria

너무 복잡하고 실용성이 없다. QueryDSL 을 사용하자

QueryDSL

  • 문자가 아닌 자바코드로 JPQL을 작성할 수 있다.
  • JPQL 빌더 역할
  • 컴파일 오류
  • 동적쿼리 작성 편리함
  • 단순하고 쉬움
  • 실무사용 권장
 

JPQL 소개

  • JPQL은 객체지향 쿼리 언어이다. 따라서 테이블 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.
  • JPQL은 SQL을 추상화 해서 특정데이터베이스 SQL에 의존하지 않는다.
  • JPQL은 결국 SQL로 변환된다.

JPQL 문법

selet_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절]
update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절]
  • select m from Member as m where m.age>18
  • 엔티티와 속성은 대소문자 구분한다.
  • JPQL 키워드는 대소문자 구분 X
  • 엔티티 이름 사용, 테이블 이름이 아님
  • 별칭은 필수(m) (as 생략가능)

집합과 정렬

select count(m), sum(m.age), avg(m.age), max(m.age), min(m.age) from Member m
  • TypeQuery : 반환 타입이 명확할때 사용
TypeQuery<Member> query = em.reateQuery("select ~",Member.class)
  • Query : 반환 타입이 명확하지 않을 때 사용
    • 결과조회 API

    • query.getResultList() : 결과가 없으면 빈 리스트 반환, 하나 이상일때 사용
    • query.getSingleResult() : 결과가 정확하게 하나있을때 사용해야한다, 없거나 두개 이상일 경우 다른 예외가 나온다.

파라미터 바인딩

select m from Member as m where m.username = :username .setParameter("username",usernameParam); 위치 기반도 있지만 가급적 위 방법인 이름 기준으로 사용하도록 하자