8. 기본 Q-Type 활용

민정·2023년 1월 9일

QueryDSL

목록 보기
8/18
post-thumbnail

✨ Q클래스 인스턴스 사용하는 2가지 방법

방법 1) 별칭 직접 지정

QMember qMember = new QMember("m"); //별칭 직접 지정

방법 2) Q파일에 생성된 기본 인스턴스 사용

QMember qMember = QMember.member; //기본 인스턴스 사용

생성된 QMember 클래스를 확인해보면, static final QMember member 필드가 이미 만들어져있는 것을 확인 할 수 있다.

기본 인스턴스에서 알아서 "member1"이라는 별칭을 줘서 Qmember 인스턴스를 생성해뒀다.


✨ 추천) 기본 인스턴스를 static import와 함께 사용

강사님은 이 방법을 권장한다! 코드가 깔끔하기 때문!!

import static study.querydsl.entity.QMember.*; // static import QMember

    // 권장하는 방법, 깔끔함
    // 기본 인스턴스를 static import와 함께 사용
    @Test
    public void startQuerydsl2() {
        // memeber1을 찾아라

        Member findMember = queryFactory
                .select(member)// QMember.member 에서 QMember static import하면 member라고 적을 수 있음.
                .from(member)
                .where(member.username.eq("member1"))
                .fetchOne();

        // 검증
        assertThat(findMember.getUsername()).isEqualTo("member1");
    }

✔ 테스트 성공



✨ querydsl으로 부터 생성되는 JPQL을 보고 싶다면?

application.yml에 다음 설정을 추가

spring.jpa.properties.hibernate.use_sql_comments: true

결과

위와 같이 나온다! SQL 전에 주석 처리된 부분이 생성된 JPQL이다!

JPQL에서 Member 엔티티 별칭이 member1로 설정된 것을 확인할 수 있다.
왜냐면 Q파일에서 QMember 인스턴스 생성할 때 member1으로 별칭을 설정해줬기 때문이다

별칭을 별도로 m 으로 설정하면 JPQL에서도 별칭 m을 사용한다!

아래 사진은 별칭을 m으로 설정해 QMember 인스턴스를 생성했을 때의 JPQL이다.



참고

  • 같은 테이블을 조인해야하는 경우에는 별칭을 직접 설정해줘야한다!
    두개의 테이블을 구분해야하니까 별칭을 서로 다르게 부여해야한다.

  • 같은 테이블을 조인해야 하는 경우가 아니면 기본 인스턴스를 사용하자!


출처

김영한 강사님 - 인프런 실전! Querydsl

0개의 댓글