Free Lines Arrow
본문 바로가기
DataBase/JPA

[JPA] JPQL 문법

by skahn1215 2021. 9. 23.
728x90
반응형

JPQL 문법

  • JPQL 문법은 쿼리와 유사하다.
  • 엔티티와 속성은 대소문자 구분한다.(Member, age 처럼)
    - select m from Member as m where m.age > 18
    - 객체에 있는것과 동일하게 써야 한다.
  • JPQL 키워드는 대소문자 구분이 없다.
    - select, from where 등

 

select

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

 

 

update

update 절 [where]

 

 

Delete

delete 절 [where]

 

 

 

집합과 정렬

select
    COUNT(m)   // 회원수
    SUM(m.age) // 나이합
    AVG(m.age)  // 평균나이
    MAX(m.age) // 최대 나이
    MIN(m.age)  // 최소 나이
from Member m

 

 

 

TypeQuery, Query

  • TypeQuery: 반환 타입이 명확할 때 사용
  • Query: 반환 타입이 명확하지 않을때 사용
// 타입 정보를 적어 주었기 때문에 TypedQuery 로 선언함
TypedQuery<JPQLMember> query1 = em.createQuery("select m from JPQLMember m where m.username = :username", JPQLMember.class)
    .setParameter("username","member1");

Query query2 = em.createQuery("select m.username, m.age from JPQLMember m");

 

 

 

결과조회

  • getResultLIst: 
     - 결과가 하나이상 일때 써준다.

  • getSingleResult:
    - 결과가 하나일때만 getSingleResult 를 써줘야 한다.
    - 결과가 여러개 이거나 아예 없을경우 Exception이 발생한다.

 

 

파라미터 바인딩

  • 문자기반으로 바인딩을 해줄수 있다.
JPQLMember singleResult = em.createQuery("select m from JPQLMember m where m.username = :username", JPQLMember.class)
                    .setParameter("username","member1")
                    .getSingleResult();

 

  • 위치기반도 가능하지만 사용하지 말자.
    - 숫자로 위치를 지정하면 또 바인딩될 변수가 추가 되었을때 수정이 많이 필요하다
    - 버그가 발생할 수 있다.
728x90
반응형

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

[JPA] JPQL 페이징  (0) 2021.09.24
[JPA] JPQL 프로젝션  (0) 2021.09.24
[JPA] JPQL 이란?  (0) 2021.09.23
[JPA] 값타입 컬렉션  (0) 2021.09.17
[JPA] 값타입  (0) 2021.08.22

댓글