JPQL 기본 문법

PPakSSam·2022년 1월 19일
0
post-thumbnail

JPQL

  • JPQL은 객체지향 쿼리 언어이다.
  • 테이블을 대상으로 쿼리를 날리는 것이 아닌 엔티티 객체를 대상으로 쿼리를 날린다.
  • JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다.
  • JPQL은 결국 SQL로 변환된다.

JPQL 문법

  • select m from Member as m where m.age > 18
  • 엔티티속성대소문자 구분을 한다. (Member, age)
    -> 그러므로 대소문자 유의할 것!!
  • JPQL 키워드는 대소문자 구분을 하지 않는다. (select, from, where)
  • 엔티티 이름을 사용한다. -> 테이블의 이름을 사용하는 것이 아니다! (Member)
  • 별칭은 필수이다. (m) -> as는 생략 가능하다.

TypedQuery와 Query

TypedQuery

반환 타입이 명확할 때 사용한다.

// Member 타입으로 반환할게 명확하므로 TypedQuery
TypedQeury<Member> query =  em.createQuery("select m from Member m", Member.class);

Query

반환 타입이 명확하지 않을 때 사용한다.

// m.username은 String, m.age는 int이므로 반환타입이 명확하지 않다 -> Query
Query query = em.createQuery("select m.username, m.age from Member m");

결과 조회 API

qeury.getResultList()

결과가 하나 이상일 때, 리스트 반환 -> 결과가 없으면 빈 리스트 반환

query.getSingleResult()

결과가 없으면 javax.persistence.NoResultException 발생
결과가 둘 이상이면 javax.persistence.NonUniqueResultException 발생

파라미터 바인딩

TypedQuery<Member> query = em.createQuery(
		"select m from Member m where m.username = :username", 
		 Member.class); 

query.setParameter("username", "member1");
List<Member> resultList = query.getResultList();
profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글