프로젝트 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 |