객체 지향 쿼리 언어
-> 테이블이 아니라 Entity 객체를 대상으로 쿼리
SQL을 추상화해서 특정 DB SQL에 의존 X
JPQL은 결국 SQL로 변환된다.
이후 사용될 예제의 모델
GROUP BY
, HAVING
, ORDER BY
도 똑같이 이용하면 된다.
//Member.class를 명시해줬기에 Member제네릭을 가진다.
TypedQuery<Member> query =
em.createQuery("SELECT m FROM Member m", Member.class);
//반환 타입이 명확하지 않을 경우 Query 사용
Query query =
em.createQuery("SELECT m.username, m.age from Member m");
query.getResultList()
: 결과가 하나 이상일 때, 리스트 반환
query.getSingleResult()
: 결과가 정확히 하나, 단일 객체 반환
Member singleResult = em
.createQuery("SELECT m FROM Member m where m.username=:username", Member.class)
.setParameter("username", "member1");
System.out.println(singleResult.getUserName());
:username
, "username"
이름으로 지정해서 가져오기 때문에 순서가 뒤바뀌는 실수가 발생하지 않는다.
TypedQuery<Member> query = em
.createQuery("SELECT m FROM Member m where m.username=?1", Member.class);
query.setParameter(1, usernameParam);
?1
, 1
파라미터를 위치기준으로 끼워넣으면 실수할 수 있다. -> 웬만하면 사용하지 말 것
참고 :
김영한. 『자바 ORM 표준 JPA 프로그래밍』. 에이콘, 2015.