기본 Q-Type 활용

학습 페이지

Q클래스 인스턴스를 사용하는 방법은 이전에도 말했듯이 두가지가 있다.

      QMember m = new QMember("m"); //alias 필수
      QMember m = QMember.member; //static 메서드 사용

image.png

이 스태틱 메서드도 내부적으로는 이렇게 구현되어있다.

그리고 위 스태틱 메서드도 아예 스태틱 임포트 해버려도 된다.

import static hello.querydsl.entity.QMember.*;

...

        Member findMember = queryFactory
                .select(member)
                .from(member)
                .where(member.username.eq("member1"))
                .fetchOne();

그럼 이렇게까지 코드가 줄어든다…!

💡 여기서 member 는 jpql이 생성하는 alias이다. 만약 같은 테이블끼리 조인해서 별칭을 다르게 줘야 할 경우에는 스태틱을 사용하지 말고 직접 생성자로 다른 alias를 주자.

참고로 querydsl은 jpql의 빌더 라이브러리라고 이해하면 된다. querydsl이 생성하는 sql뿐만 아니라, 그 중간단계인 jpql까지 보고 싶다면 다음의 옵션을 추가하자.

use_sql_comments:

spring:  
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        use_sql_comments: true #querydsl이 생성하는 jpql확인
      #show_sql: true
      format_sql: true

검색 조건 쿼리

학습 페이지

@Test
    public void search() {
        Member findMember = queryFactory
                .selectFrom(member)
                .where(member.username.eq("member1")
                        .and(member.age.eq(10)))
                .fetchOne();

        assertThat(findMember.getUsername()).isEqualTo("member1");
    }

where절에서 and등을 이용해 검색조건을 강화할 수도 있다. 메서드체인을 활용하자.