JPA

[JPA] 21. JPQL - 기본 문법 1

inuma 2021. 1. 26. 00:19
프로젝트 git url github.com/rtef23/JpaStudy
필요 1. docker
2. docker-compose
프로젝트 정보 mysql : 5.7 - docker image
java : 1.8

 

JPQL(Java Persistence Query Language)

  • 객체 지향 쿼리 언어
  • 엔티티 객체를 대상으로 쿼리
  • JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL 문법에 의존하지 않는다.
  • JPQL은 Dialect를 통해서 최종적으로 SQL로 변환된다.

 

 

JPQL 기본 문법

select statement ::= 
  select
  from
  [where]
  [group by]
  [having]
  [order by]
  
update statement ::=
  update
  [where]
  
delete statement ::=
  delete
  [where]
  • 엔티티와 속성은 대소문자로 구분([example] Member ; 엔티티, age ; 속성)
  • JPQL 키워드는 대소문자 구분 안함([example] select, SELECT, Select, ...)
  • 테이블 이름이 아닌 엔티티 이름 사용
  • 별칭은 필수(as는 생략 가능)

 

JPQL - SQL 함수

  • 일부 SQL 표준 함수 사용 가능(group by, having, order by, count, sum, ...)
SELECT COUNT(m)
     , SUM(m.age)
     , AVG(m.age)   
  FROM Member m

 

TypedQuery VS Query

TypedQuery

TypedQuery typedQuery= entityManager.createQuery("select m from Member m", Member.class);
  • 반환 타입이 명확할 때 사용

Query

Query query = entityManager.createQuery("select m.username from Member m");
  • 반환 타입이 명확하지 않을 때 사용

 

결과 조회 API

  • 단건 조회
    • 식별자 지정 조회 
    • 결과가 정확히 하나일 때 사용
      • 결과가 없는 경우,
        • javax.persistence.NoResultException 예외 발생
        • spring-data-JPA의 경우, 결과가 없는 경우 null(or Optional) 리턴
      • 결과가 2개 이상의 경우,
        • javax.persistence.NonUniqueResultException 예외 발생
    • getSingleResult() API 사용

 

 

  • 다건 조회
    •  범위 쿼리
    • 결과가 하나 이상일 때, 리스트 반환
    • getListResult() API 사용

 

파라미터 바인딩

//파라미터 이름 기반 바인딩 방법
Member findMember =
        entityManager
            .createQuery("select m from Member m where m.username=:username", Member.class)
            .setParameter("username", "test-user-name")
            .getSingleResult();
            
//파라미터 순서 기반 바인딩 방법
Member findMember1 =
        entityManager
            .createQuery("select m from Member m where m.username=?1", Member.class)
            .setParameter(1, "test-user-name")
            .getSingleResult();

 

'JPA' 카테고리의 다른 글

[JPA] 23. JPQL - 조인, 서브 쿼리  (0) 2021.01.31
[JPA] 22. JPQL - 기본 문법 2  (0) 2021.01.27
[JPA] 20. JPA 쿼리 방법 소개  (0) 2021.01.25
[JPA] 19. 값 타입 컬렉션  (0) 2021.01.23
[JPA] 18. 값 타입 - 불변 객체  (0) 2021.01.21