반응형
지난 포스팅에서 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 실행결과를 클라이언트가 원하는 타입으로 제공할 수 있는 다양한 메소드를 가지고 있다.
참고자료
반응형
'JPA > QueryDSL' 카테고리의 다른 글
[QueryDSL] 공통으로 사용하는 표현 - ComparableExpressionBase (0) | 2023.08.08 |
---|---|
[QueryDSL] 공통으로 사용하는 표현 - LiteralExpression (0) | 2023.08.07 |
[QueryDSL] 검색조건 ( where ) (0) | 2023.08.07 |
[QueryDSL] Expression( 표현 ) (0) | 2023.08.04 |
[QueryDSL] QueryDSL 동작원리(3) - fetch (0) | 2023.08.02 |