QueryDSL - 기본 Q-Type 활용

2022. 8. 6. 19:15·공부/JPA
반응형

출처 : 인프런 실전! QueryDSL

Query DSL게시글은 대부분 인프런의 김영한님의 강의인 '실전! Query DSL' 기반으로 내용을 정리했습니다.

 

기본 Q-Type 활용

Q 클래스 인스턴스를 사용하는 방법

  • 별칭 직접 지정
QMember qMember = new QMember("m");
  • 기본 인스턴스 사용
QMember qMember = QMember.member;

기본 인스턴스는 QMember 클래스 파일에 가보면 아래 코드로 만들어져 있는 걸 확인할 수 있다.

public static final QMember member = new QMember("member1");

 

저번에 작성한 테스트 코드에 적용해보자.

//QMember m = new QMember("m"); // 별칭 주는 방법
QMember m = QMember.member; // 기본 인스턴스 사용 방법

위와 같이 사용해도 되고 더 나아가 import  static으로 더 짧게 사용하는 방법도 있다. 이 방법을 제일 권장한다.

import static study.querydsl.entity.QMember.member;

//... 생략

//QMember m = QMember.member;

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

실행해보면 잘 실행되는 걸 확인할 수 있다.

 

 

JPQL 쿼리 확인하기

QueryDSL은 JPQL의 Builder 역할을 한다. 즉 QueryDSL로 작성한 코드는 JPQL로 번역이 된다. 그래서 콘솔 창에 JPQL 쿼리를 보고 싶으면 따로 설정해주어야 한다.

  • application.yml에 use_sql_comments 추가
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
#        show_sql: true
        format_sql: true
        use_sql_comments: true

설정 후 다시 테스트 코드를 실행하고 콘솔창에 찍히는 로그를 확인해보자.

    /* select
        member1 
    from
        Member member1 
    where
        member1.username = ?1 */ select
            member0_.member_id as member_i1_1_,
            member0_.age as age2_1_,
            member0_.team_id as team_id4_1_,
            member0_.username as username3_1_ 
        from
            member member0_ 
        where
            member0_.username=?

위 주석문이 JPQL이다. JPQL을 보면 from Member member1을 볼 수 있다. member1은 QMember의 기본 인스턴스 이름인 member1을 그대로 가져온다. 저 부분을 변경하고 싶으면 별칭을 직접 지정해주는 방식으로 QMember로 지정해주면 된다. 별칭을 직접 주는 방식은 같은 테이블을 join 해야 할 때 이름이 같으면 안 되니까 별칭을 직접 주어서 사용하면 된다. 그 외에는 그냥 기본 인스턴스를 사용하는 방식으로 사용하자.

 

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/JPA' 카테고리의 다른 글
  • Query DSL - 결과 조회
  • Query DSL - 검색 조건 쿼리
  • Query DSL - JPQL vs QueryDSL
  • Query DSL - 예제 도메인 모델
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    에러해결
    알고리즘
    전자정부프레임워크
    인프런
    springboot
    프론트엔드
    토비의스프링부트
    넥사크로
    MSA
    SpringBoot를 이용한 RESTful Web Service 개발
    코딩테스트
    백준
    기출문제
    QueryDSL
    방통대
    SQL
    Java
    운영체제
    스프링부트
    개발자
    프로그래머스
    토이프로젝트
    JPA
    oracle
    Spring
    RESTful
    egov
    자바스크립트
    IT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
QueryDSL - 기본 Q-Type 활용
상단으로

티스토리툴바