: Java Persistence Query Language
- JPQL은 객체지향 쿼리 언어다. → 엔티티 객체를 대상으로 쿼리한다.
- SQL을 추상화하여 특정DB SQL에 의존하지 않는다.
- 결국 SQL로 변환된다.
- ex. select m from Member as m where m.age > 18
- 엔티티와 속성은 대소문자를 구분한다 (Member, age)
- JQL 키워드는 대소문자 구분x
- 엔티티의 이름을 사용한다.
- 별명은 필수다!(m) (as는 생략가능)
select
COUNT(m), //회원수
SUM(m.age), //나이 합
AVG(m.age), //평균 나이
MAX(m.age), //최대 나이
MIN(m.age) //최소 나이
from Member m
- GROUP BY HAVING
- ORDER BY
: 반환 타입이 명확할 때 사용
//예시
TypeQuery<Member> query1 =
em.createQuery("select m from Member m", Member.class);
TypeQUery<member> query2 =
em.createQuery("select m.username from Member m", Member.class);
: 반환 타입이 명확하지 않을 때 사용
Query query =
em.createQuery("select m.username, m.age from Member m"); // 반환을 String,이랑 Int처럼 달라서 타입 정보를 받을 수 없다.
query.getResultList()
- 리스트를 반환한다.
- 결과가 없으면 빈 리스트를 반환한다.
query.getSingleResult()
- 결과가 없으면 : javax.persistence.NoResultException
- 둘 이상이면 : javax.persistence.NonUniqueResultException
em.query("select m from member m where m.username:username")
.query.setParameter("username", usernameParam);
권장하지 않는다.
em.query("select m from Member m where m.username=?1")
query.setParameter(1, usernameParam);