[Querydsl] 8. 스프링 부트 3.x(2.6 이상), Querydsl 5.0 지원 방법

2024. 1. 29. 09:55·인프런 Spring 강의 정리/실전! Querydsl
728x90
반응형
✅ 최신 스프링 부트 3.x(2.6부터)은 Querydsl 5.0을 사용

 

📌 /build.gradle 설정 방법

참고 링크

 

📌 PageableExecutionUtils Deprecated(향후 미지원) 패키지 변경

☃︎ PageableExecutionUtils 클래스 사용 패키지 변경

  • 기능이 Deprecated 된 것은 아니고, 사용 패키지 위치가 변경
  • 기존 위치를 신규 위치로 변경해주시면 문제 없이 사용 가능
  •  

📌 Querydsl fetchResults(), fetchCount() Deprecated(향후 미지원)

  • Querydsl의 fetchCount() , fetchResult() 는 개발자가 작성한 select 쿼리를 기반으로 count용 쿼리를 내부에서 만들어서 실행
  • select 구문을 단순히 count 처리하는 용도로 바꾸는 정도
  • 단순한 쿼리에서는 잘 동작하지만, 복잡한 쿼리에서는 제대로 동작하지 않습니다.
  • Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했습니다.
  • Querydsl의 변화가 빠르지는 않기 때문에 당장 해당 기능을 제거하지는 않을 것

➡️ count 쿼리가 필요하면 다음과 같이 별도로 작성해야 함

 

✅ count 쿼리 예제

@Test
public void count() {
    Long totalCount = queryFactory
            //.select(Wildcard.count) //select count(*)
            .select(member.count()) //select count(member.id)
            .from(member)
            .fetchOne();
    System.out.println("totalCount = " + totalCount);
}
  • count(*) 을 사용하고 싶으면 주석처럼 Wildcard.count 를 사용
  • member.count() 를 사용하면 count(member.id) 로 처리됨
    •  응답 결과는 숫자 하나이므로 fetchOne() 을 사용

 

✅ 최신 버전에 맞추어 수정된 예제

  • MemberRepositoryImpl.searchPageComplex() 예제에서 본 것 처럼 select 쿼리와는 별도로 count 쿼리를 작성하고 fetch() 를 사용해야 함

 

import org.springframework.data.support.PageableExecutionUtils; //패키지 변경
public Page<MemberTeamDto> searchPageComplex(MemberSearchCondition condition, Pageable pageable) {
	List<MemberTeamDto> content = queryFactory
			.select(new QMemberTeamDto(
					member.id.as("memberId"),
					member.username,
					member.age,
					team.id.as("teamId"),
					team.name.as("teamName")))
            .from(member)
            .leftJoin(member.team, team)
            .where(
                    usernameEq(condition.getUsername()),
                    teamNameEq(condition.getTeamName()),
                    ageGoe(condition.getAgeGoe()),
                    ageLoe(condition.getAgeLoe())
            )
            .offset(pageable.getOffset())
            .limit(pageable.getPageSize())
            .fetch();
            
	JPAQuery<Long> countQuery = queryFactory
            .select(member.count())
            .from(member)
            .leftJoin(member.team, team)
            .where(
                    usernameEq(condition.getUsername()),
                    teamNameEq(condition.getTeamName()),
                    ageGoe(condition.getAgeGoe()),
                    ageLoe(condition.getAgeLoe())
			);

	return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne);
}

 

 

 

 

 

김영한님의 <실전! Querydsl>을 수강하고 작성한 글입니다

 

 


PREV

 

[Querydsl] 7. 스프링 데이터 JPA가 제공하는 Querydsl 기능

지금 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족함 참고 정도로 ! 📌 인터페이스 지원 - QuerydslPredicateExecutor 공식 URL ⚒️ QuerydslPredicateExecutor 인터페이스 public i

nyeroni.tistory.com

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'인프런 Spring 강의 정리 > 실전! Querydsl' 카테고리의 다른 글

[Querydsl] 7. 스프링 데이터 JPA가 제공하는 Querydsl 기능  (1) 2024.01.29
[Querydsl] 6. 실무 활용 - 스프링 데이터 JPA와 Querydsl  (1) 2024.01.29
[Querydsl] 5. 실무 활용 - 순수 JPA와 Querydsl  (0) 2024.01.28
[Querydsl] 4. 중급 문법  (1) 2024.01.27
[Querydsl] 3. 기본 문법  (2) 2024.01.27
'인프런 Spring 강의 정리/실전! Querydsl' 카테고리의 다른 글
  • [Querydsl] 7. 스프링 데이터 JPA가 제공하는 Querydsl 기능
  • [Querydsl] 6. 실무 활용 - 스프링 데이터 JPA와 Querydsl
  • [Querydsl] 5. 실무 활용 - 순수 JPA와 Querydsl
  • [Querydsl] 4. 중급 문법
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[Querydsl] 8. 스프링 부트 3.x(2.6 이상), Querydsl 5.0 지원 방법
상단으로

티스토리툴바