JPQL

Daniel6364·2022년 10월 28일
0

JPQL

JPQL의 특징

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

기본 문법과 쿼리 API

select_문 :: =
	select_절
    from_절
    [where_절]
    [groupby_절]
    [having_절]
    [orderby_절]
    
update_문 :: = update_절 [where_절]
delete_문 :: = delete_절 [where_절]    

INSERT문은 EntityManager.persist()메소드를 사용하면 된다.

SELECT 문

SELECT m FROM Member AS m where m.username = 'Hello'
  • 대소분자 구분
    • 엔티티와 속성은 대소문자를 구분한다.
    • Member, username은 대소문자를 구분한다.
    • 반면 SELECT, FROM, AS 같은 JPQL 키워드는 대소문자를 구분하지 않는다.

  • 엔티티 이름
    • JPQL에서 사용한 Member는 클래스 명이 아니라 엔티티 명이다.
    • 엔티티 명은 @Entity(name="XXX")로 지정할 수 있다.
    • 엔티티 명을 지정하지 않으면 클래스명을 기본값으로 사용한다.
    • 기본값인 클래스 명을 엔티티 명으로 사용하는 것을 추천한다.

  • 별칭은 필수
    • Member AS m 처럼 alias는 필수로 사용해야 한다.
    • 별칭 없이 작성하면 잘못된 문법이라는 오류가 발생한다.

TypeQuery, Query

JPQL을 실행하려면 쿼리 객체를 만들어야 한다. 반환할 타입을 명확하게 지정할 수 있으면 TypeQuery 객체를 사용, 반환 타입을 명확하게 지정할 수 없으면 Query 객체를 사용하면 된다.

TypedQuery<Member> query =
	em.createQuery("SELECT m FROM Member m", Member.class);

List<Member> resultList = query.getResultList();
for (Member member : resultList) {
	System.out.println("member = " + member);
}
profile
The Office Lover

0개의 댓글