현의 개발 블로그

[JPQL 문법] JPQL 기본 문법과 쿼리 API 본문

스프링부트 이론/JPA

[JPQL 문법] JPQL 기본 문법과 쿼리 API

hyun2371 2023. 8. 2. 19:23

객체 지향 쿼리 언어 JPQL 기본 문법에 대해 살펴보자.

 

규칙

  • 엔티티와 속성은 대소문자를 구분한다. 
    • ex) Member, age
  • JPQL 키워드는 구분하지 않는다.
    • ex) SELECT, from
  • 테이블명이 아니라 엔티티명을 사용한다.
  • 별칭은 필수로 있어야 하고 as는 생략 가능하다.
select m from Member as m where m.age > 18

 

집합과 정렬

select 
    COUNT(m),
    SUM(m.age),
    AVG(m.age),
    MAX(m.age),
    MIN(m.age)
from Member m

 

결과 조회 API

query.getResultList() 

결과가 하나 이상일 때, 리스트를 반환한다. 결과가 없으면 빈 리스트를 반환한다.

 

query.getSingleResult()

무조건 결과가 하나인 단일 객체를 반환한다.

결과가 없으면 java.persistence.NoResultException이 발생하고,

결과가 두 개 이상이면 java.persistence.NoUniqueResultException이 발생한다.

 

 

파라미터 바인딩

.setParamter(key, value) 형태이다.

username에 "member1"을 대입하여 해당 이름인 Member 객체를 찾는다.

Member result = 
	em.createQuery("select m from Member m where m.username=:username", Member.class)
		.setParameter("username", "member1")
		.getSingleResult();

System.out.println(singleResult);

 

페이징 API

JPA는 페이징을 다음 두 API로 추상화한다.

- setFirstResult(int startPosition) : 조회 시작 위치 (0부터)

- setMaxResult(int maxResult): 조회할 데이터 수

List<Member> result = em.createQuery("select m from Member m order by m.age desc", Member.class)
        .setFirstResult(0)
        .setMaxResults(10)
        .getResultList();

System.out.println("result.size() = " + result.size());
for (Member member1 : result){
    System.out.println("member1 = " + member1);
}

Member를 나이에 따라 내림차순으로 정렬해 10개 출력한다.

 

 

 


Reference

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자

www.inflearn.com

 

Comments