728x90
JPQL 문법
- 엔티티와 속성은 대소문자 구분한다.
- JPQL 키워드는 대소문자 구분 안한다.
- 엔티티 이름 사용, 테이블 이름이 아니다.
- 별칭은 필수(예: m) (as는 생략가능)
- 예) select m from Member m where m.age > 18
집합과 정렬
GROUP BY, HAVING, ORDER BY도 전부 사용한다.
select
COUNT(m), //회원수
SUM(m.age), //나이 합
AVG(m.age), //평균 나이
MAX(m.age), //최대 나이
MIN(m.age) //최소 나이
from Member m
TypeQuery와 Query
TypeQuery: 반환 타입이 명확할 때 사용
Query: 반환 타입이 명확하지 않을 때 사용
예)
Member member = new Member();
member.setUsername("mem1");
member.setAge(10);
em.persist(member);
//반환 타입이 명확할 때
TypedQuery<Member> query1 = em.createQuery("select m from Member m where m.age = 10", Member.class);
TypedQuery<String> query2 = em.createQuery("select m.username from Member m", String.class);
//반환 타입이 명확하지 않을 때
Query query3 = em.createQuery("select m.username, m.age from Member m");
결과 조회 API
query.getResultList()
- 결과가 하나 이상일 때, 리스트 반환
- 결과가 없으면 빈 리스트를 반환
query.getSingleResult()
- 결과가 정확히 하나일 때, 단일 객체 반환
- 결과가 없으면: javax.persistence.NoResultException
- 둘 이상이면: javax.persistence.NonUniqueResultException
예)
//결과가 하나 이상일 때, 리스트 반환
//결과가 없으면 빈 리스트 반환
List<String> resultList = query2.getResultList();
//결과가 정확히 하나, 단일 객체 반환
Member singleResult = query1.getSingleResult();
파라미터 바인딩
이름 기준
SELECT m FROM Member m where m.username=:username query.setParameter("username", usernameParam);
//파라미터 바인딩 (이름 기준)
Member result = em.createQuery("select m from Member m where m.username= :username", Member.class)
.setParameter("username", "mem1")
.getSingleResult();
위치 기준(쓰지 않는 것이 좋다.)
SELECT m FROM Member m where m.username=?1 query.setParameter(1, usernameParam);
728x90
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
JPA | JPQL 문법 뿌시기 - 조인, 서브 쿼리 (0) | 2023.05.04 |
---|---|
JPA | JPQL 문법 뿌시기 - 프로젝션(SELECT), 페이징 API (0) | 2023.05.03 |
JPA | 객체지향 쿼리 언어 간단 소개 (JPQL, Criteria, QueryDSL 등) (0) | 2023.05.02 |
JPA | 예제로 알아보는 값 매핑 (예제 - 6) (0) | 2023.05.02 |
JPA | 예제로 알아보는 영속성 전이 (예제 - 5) (0) | 2023.05.02 |