JPA/QueryDSL

[QueryDSL] 결과조회 ( fetch )

IT록흐 2023. 8. 7. 15:45
반응형
 

[QueryDSL] QueryDSL 동작원리(3) - fetch

QueryDSL은 JPQL 생성 및 실행 권한을 자신에게 위임하여, 개발자가 JPQL을 직접 작성했을 때 발생하는 타입 안정성 체크의 어려움이나 동적 쿼리생성 문제를 해결할 수 있다. 개발자는 그저 JPQL 생성

lordofkangs.tistory.com

 

지난 포스팅에서 QueryDSL의 동작원리를 다루며 fetch의 의미를 알아보았다. 

 

클라이언트 쪽 QueryDSL 코드 

public List<Member> searchMember(MemberSearchCondition condition){
    return queryFactory
            .select(member) // JPQL 데이터 설정 START
            .from(member)
            .leftJoin(member.team, team)
            .where(
                    usernameEq(condition.getUsername()),
                    teamNameEq(condition.getTeamName()),
                    ageGoe(condition.getAgeGoe()),
                    ageLoe(condition.getAgeLoe())
            } // JPQL 데이터 설정 END
            .fetch(); // JPQL 생성 및 실행
}

 

위 코드는 클라이언트가 QueryDSL에게 JPQL 생성 및 실행을 요청하는 코드이다. JPQL 생성 및 실행을 요청하려면 우선 어떤 JPQL을 원하는지부터 묘사해야 한다. select, from, where 같은 메소드를 체인방식으로 연결하여 JPQL 생성에 필요한 데이터를 설정한다. 설정이 완료되면, 생성 및 실행을 요청해야 하는데, 그 메소드가 fetch 메소드이다. 

 

fetch 메소드에는 여러 종류가 있다. 

 

//List
List<Member> fetch = queryFactory
          .selectFrom(member)
		  .fetch();
          
//단 건
Member findMember1 = queryFactory
          .selectFrom(member)
          .fetchOne();
          
//처음 한 건 조회
Member findMember2 = queryFactory
          .selectFrom(member)
          .fetchFirst();
          
//페이징에서 사용
QueryResults<Member> results = queryFactory
         .selectFrom(member)
 		 .fetchResults();
         
//count쿼리로 변경
long count = queryFactory
          .selectFrom(member)
          .fetchCount();

 

클라이언트는 반환받고 싶은 타입에 따라 fetch 메소드를 선택하면 된다. QueryDSL은 이렇듯 JPQL 실행결과를 클라이언트가 원하는 타입으로 제공할 수 있는 다양한 메소드를 가지고 있다. 

 

 


 

 

참고자료

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, 복잡한 쿼리, 동적 쿼리는 이제 안녕! Querydsl로 자바 백엔드 기술을 단단하게. 🚩 본 강의는 로드맵 과정입니다. 본 강의는 자바 백엔

www.inflearn.com

 

 

 

반응형