반응형
여승철
INTP 개발자
여승철
  • 분류 전체보기 (376)
    • CS (16)
      • 면접 준비 (7)
      • 운영체제 (0)
      • 네트워크 (2)
      • HTTP (6)
      • 스프링(Spring) IoC 컨테이너 (0)
      • 알고리즘 (1)
    • Web (13)
    • AWS (6)
    • Java (43)
    • JSP & Servlet (65)
      • 개념 (42)
      • 실습 (23)
    • Spring Framework (33)
    • Spring Boot (10)
    • Spring Data (22)
      • JPA (14)
      • Query DSL (7)
      • Redis (1)
    • Spring Security (9)
    • Spring Batch (4)
    • MyBatis (10)
    • Front-End (51)
      • JS (27)
      • Vue.js (17)
      • React (5)
      • JQuery (0)
      • d3.js (2)
    • DBMS (24)
      • SQL, RDBMS (16)
      • MongoDB (5)
      • Redis (3)
    • Kafka (3)
    • 리눅스 (Linux) (4)
    • 디자인 패턴 (3)
    • VCS (8)
    • API (0)
    • TOOL (3)
    • Reading Book (28)
      • 이펙티브 자바 (11)
      • Clean Code (10)
      • 1분 설명력 (4)
      • HOW TO 맥킨지 문제해결의 기술 (3)
    • C# (4)
    • NSIS (6)
    • ETC (11)

블로그 메뉴

  • 홈
  • 태그

인기 글

태그

  • JSTL
  • 이펙티브 자바
  • 게시판
  • 로그인
  • querydsl
  • servlet
  • mybatis
  • Dao
  • JDBC
  • controller
  • 스트림
  • 회원 관리
  • HTTP
  • jsp
  • EC2
  • ubuntu
  • Spring Batch
  • 환경 세팅
  • 맥킨지
  • 디자인 패턴

최근 댓글

최근 글

hELLO· Designed By 정상우.
여승철

INTP 개발자

QueryDSL 페이징 처리
Spring Data/Query DSL

QueryDSL 페이징 처리

2023. 1. 19. 00:36
반응형

바로 전 포스팅인 https://yeo-computerclass.tistory.com/413에서 작성한 코드에 이어 페이징 처리를 실습해보겠습니다.

 


 

Querydsl 페이지 연동

QueryDSL Custom Repository 인터페이스에 페이지 추가

public interface MemberRepositoryCustom {
    List<MemberTeamDto> search(MemberSearchCondition condition);
    Page<MemberTeamDto> searchPage(MemberSearchCondition condition, Pageable pageable);

}

 

searchPage()

public Page<MemberTeamDto> searchPageSimple(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();
            
    return new PageImpl<>(content, pageable, content.size());
}
  • fetchCount() / fetchResult()가 deprecated 되었습니다. 때문에 totalCount를 구하는 방법은 다음과 같이 두 가지가 있습니다.
    • 저는 일단 간단하게 fetch() 메서드로 조회한 결과에 size() 메서드 써서 totalCount를 구했습니다.
    • 두 번째 방법으로는 아래와 같이 별도의 카운트 쿼리를 날려주면 됩니다. 이때 count의 결과는 한 개이기 때문에 fetchOne() 메서드를 이용해주면 됩니다.
Long totalCount = queryFactory
		.select(member.count())
        .from(member)
        .fetchOne();

 

 

 

PageableExecutionUtils 활용

  • 스프링 데이터 라이브러리
public Page<MemberTeamDto> searchPage (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);
}
반응형

'Spring Data > Query DSL' 카테고리의 다른 글

QueryDSL Spring Data JPA + 동적 쿼리  (0) 2023.01.18
QueryDSL 벌크 쿼리  (0) 2023.01.16
QueryDSL 동적 쿼리  (0) 2023.01.16
QueryDSL DTO에 값 담기  (0) 2023.01.15
QueryDSL 문법  (0) 2023.01.15
    여승철
    여승철

    티스토리툴바