TIL - 20250802

juni·2025년 8월 2일

TIL

목록 보기
82/317

0802 학습 정리


✅ QueryDSL 주요 문법 요약

📌 기본 문법

  • JPAQueryFactory: QueryDSL의 쿼리 생성을 담당하는 핵심 객체
  • Q도메인클래스: QueryDSL이 도메인 클래스에 대해 생성한 쿼리 타입 클래스 (예: QIdol)

📌 기본 조회 방식

factory.selectFrom(idol).fetch();
factory.select(idol.idolName).from(idol).fetch();

📌 where 조건절

.where(idol.idolName.eq("사쿠라"))
.where(idol.age.between(20, 30))

📌 and, or 조건

.where(idol.idolName.eq("김채원").and(idol.age.gt(20)))

📌 정렬

.orderBy(idol.age.asc(), idol.idolName.desc())

📌 페이징

.offset(0).limit(5)

📌 fetch 종류

  • fetch(): 리스트 반환
  • fetchOne(): 단일 객체 반환 (결과가 2개 이상이면 예외 발생)
  • fetchFirst(): 첫 번째 결과만 반환

✅ QueryDSL 연관관계 조회

▶ Join 조회

factory.selectFrom(idol)
       .join(idol.group, group)
       .where(group.groupName.eq("아이브"))
       .fetch();

▶ Fetch Join (지연로딩 방지)

factory.selectFrom(idol)
       .join(idol.group, group).fetchJoin()
       .fetch();

▶ N+1 문제 해결

  • fetchJoin()을 통해 join한 엔티티도 한 번에 같이 조회됨 → 쿼리 1번만 실행됨

✅ 정리 요약

  • QueryDSL은 JPQL을 타입 안전하게 Java 문법으로 작성할 수 있도록 도와줌
  • 조건, 정렬, 페이징, fetch 타입 등 다양한 SQL 패턴을 지원
  • 연관관계 조회, Fetch Join 등을 통해 성능 최적화 가능
  • 실무에서도 repository layer에서 QueryDSL을 자주 사용함

0개의 댓글