JPQL 기본 문법

InOut·2023년 7월 21일

JPA

목록 보기
1/4

최근 JPA에 관심이 생겨서 공부중인데 JPA가 제공하는 쿼리 중 JPQL의 기본문법에 대해서 정리해봄.

JPQL(Java Persistence Query Language)

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

JPQL 문법

  • select m from Member as m where m.age > 18
  • 엔티티와 속성은 대소문자 구분O (Member, age)
  • JPQL키워드는 대소문자 구분X (SELECT , FROM, where)
  • 엔티티 이름을 사용함, 테이블 이름이 아님(Member)
  • 별칭은 필수 (m) (as는 생략가능)

TypedQuery, Query

  • TypedQuery : 반환 타입이 명확할 때
  • Query : 반환 타입이 명확하지 않을 때
TypedQuery<Member> query = 
	em.createQuery("SELECT m FROM Member m", Member.class);
    
Query query = 
	em.createQuery("SELECT m.username, m.age from Member m");

결과 조회

  • query.getResultList()
    • 결과가 하나 이상일 떄, 리스트 반환
    • 결과가 없으민 빈 리스트 반환
  • query.getSingleResult()
    • 결과가 정확히 하나, 단일 객체 반환
    • 결과가 없으면, NoResultException
      둘 이상이면 NonUniqueResultException

파라미터 바인딩 - 이름 기준, 위치 기준

이름기준 > 
SELECT m FROM Member m where m.username = :username
query.setParameter("username", usernameParam);

위치기준 > (위치는 변경 될 경우가 있고 버그를 유발할 수 있으니 권장X)
SELECT m FROM Member m where m.username = ?1
query.setParameter(1, usernameParam);



JPQL 기본문법과 실행결과

이 글은 김영한님의 JPA 강의를 듣고 정리한 내용입니다.

profile
개발새발

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

항상 좋은 글 감사합니다.

답글 달기