JPQL 작성 방법

JooHeon·2021년 11월 16일
0

🖊 JPQL 문법

select m from Member m where m.age > 26
  • Entity와 속성은 대소문자 구분해서 작성해야한다.
  • JPQL 키워드는 대소문자를 구분하지 않는다(SELECT, FROM, WHERE)
  • 별칭이 필수(m)

TypeQuery, Query

TypedQuery<Member> query = 
	em.createQuery("select m from Member m where m.age > 26", Member.class);
Query query = 
	em.createQuery("select m .age, m.username from Member m where m.age > 26");
  • TypeQuery는 반환 타입이 명확할 때 사용한다
  • Query는 반환 타입이 명확하지 않을 때 사용한다.

결과 조회 API

TypedQuery<Member> query = 
	em.createQuery("select m from Member m where m.age > 26", Member.class);
    
List<Member> members = query.getResultList();
  • getResultList는 결과가 없으면 빈 리스트를 반환한다.
TypedQuery<Member> query = 
	em.createQuery("select m from Member m where m.id = 1", Member.class);
    
Member member = query.getSingleResult();
  • getSingleResult는 결과가 정확히 하나가 반환되지 않으면 Exception 오류가 발생한다.
  • Spring data jpa같은 경우에는 추상화 해서 메소드가 제공되어 결과가 없으면 null이 반환된다.

파라미터 바인딩

int userAge = 100;
TypedQuery<Member> query = 
	em.createQuery("select m from Member m where m.age > :age", Member.class)
    	.setParameter("age", userAge);
    
List<Member> members = query.getResultList();

NamedQuery

Entity
@NamedQuery(
	name = "Member.findByUsername",
        query = select m from Member m where m.username = :username")
public class Member {
	...
}
  • 어플리케이션 로딩 시점에 쿼리 실수를 잡을 수 있다.
  • SpringBoot에선 @Query를 네임드쿼리에 등록해준다.

0개의 댓글