[인프런 김영한] JPA - JPQL 기본문법

2021. 2. 15. 15:54프로그래밍 언어/Spring Framework

[인프런 김영한] JPA - JPQL 기본문법


해당 글은 인프런 김영한강사님의 영상을 보고 정리한 글입니다.

Spring Boot, Spring Data JPA를 사용해 실습하였습니다.

김영한 인프런 : www.inflearn.com/users/@yh

 

인프런 - 김영한의 강의들을 만나보세요.

우아한형제들 개발 팀장 (전: 카카오, SK플래닛) 저서: 자바 ORM 표준 JPA 프로그래밍

www.inflearn.com


▣ JPQL 소개

 * JPQL은 객체지향 쿼리 언어. 테이블을 대상으로 쿼리하는것이 아니라 Entity 객체를 대상으로 쿼리한다.

 * JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.

 * JPQL은 결국 SQL로 변환

 

 

 

 

▣ 실습

 

▣ JPQL 문법

 * "select m from Member as m where m.age > 18" 

 - Entity와 속성은 대소문자 구분한다 (Member, age)

 - @Entity(name = "MM")일경우 MM이 Entity 이름이다.

 - JPQL 키워드는 대소문자 구분하지 않음(select, from, where)

 - Entity 이름 사용, Table 이름이 아님

 - 별칭은 필수 (as는 생략가능)

 

* TypeQuery : 반환 타입이 명확할 때

* Query : 반환 타입이 명확하지 않을 때

TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);
TypeQuery<String> query = em.createQuery("select m.username from Member m", String.class); // username는 string

TypeQuery<Member> query = em.createQuery("select m.username, m.age from Member m"); // username는 string, age는 int  Type을 선택할 수 없기 때문에 Query 사용
Query query = em.createQuery("select m.username, m.age from Member m"); // 반환 타입이 명확하지 않을 때 사용

 

 

▣ 결과 조회 API

query.getResultList() : 결과가 하나 이상일 때, 리스트 반환
 * 결과가 없으면 빈 리스트 반환

TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);

List<Member> resultList = query.getResultList();
iterator(Member member1 : resultList) {
    System.out.println("member 1 : " + member1);
}



query.getSingleResult() : 결과가 정확히 하나, 단일 객체 반환
 * 결과가 없으면 noResultException 반환
 * 결과가 둘 이상이면 NonUiqueResultException 반환

TypeQuery<Member> query = em.createQuery("select m from Member m", Member.class);

Member result = query.getSingleResult();
System.out.println("result = " + result) ;

 

 

 

▣ 파라미터 바인딩 - 이름 기준, [위치 기준(쓰지 말기)]

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

// 실행 쿼리 = "select * from Member where username = username1