[Querydsl] 8. 스프링 부트 3.x(2.6 이상), Querydsl 5.0 지원 방법
2024. 1. 29. 09:55
728x90
SMALL
✅ 최신 스프링 부트 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
728x90
LIST
'인프런 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. 기본 문법 (1) | 2024.01.27 |