-
Spring Boot | Querydsl 서브 쿼리 사용하기▼ Backend/└ QueryDsl 2021. 10. 20. 15:20반응형
프로젝트 QueryDsl Gradle 설정
Spring Boot | Querydsl, Gradle 설정하기 (Eclipse)
▶ Querydsl이란 Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent)
kitty-geno.tistory.com
▶ SELECT 에서의 서브 쿼리의 사용 방법
ExpressionUtils.as(~) 부분이 서브 쿼리로 작성된 부분이다.
Querydsl 내부에서 새로운 Expression을 사용할 수 있도록 지원해준다.public List < CodeDto > selectCodeList(ArrayList < String > cdDtlList) throws Exception { return jpaQueryFactory .select(Projections.constructor(CodeDto.class, code.id, code.cdId, code.cd, code.cdNm, code.cdNmEn, ExpressionUtils.as( JPAExpressions .select(code.count()) .from(code) .where(code.parntSeq.eq(code.id)), "cnt") )) .from(code) .where(code.cdId.in(cdDtlList)) .orderBy(code.id.asc()) .fetch(); }
▶ WHERE 에서의 서브 쿼리의 사용 방법
ExpressionUtils.as()을 사용하지 않고 바로 JPAExpressions를 통해 조회한다.
public List < CodeDto > selectCodeList(ArrayList < String > cdDtlList) throws Exception { return jpaQueryFactory .select(Projections.constructor(CodeDto.class, code.id, code.cdId, code.cd, code.cdNm, code.cdNmEn, ExpressionUtils.as( JPAExpressions .select(code.count()) .from(code) .where(code.parntSeq.eq(code.id)), "cnt") )) .from(code) .where( code.cdId.eq( JPAExpressions .select(code.cdId) .from(code) .where(code.cd.eq("DEPT10"))) ) .orderBy(code.id.asc()) .fetch(); }
반응형'▼ Backend > └ QueryDsl' 카테고리의 다른 글
Spring Boot | No constructor found for class.. with parameters (0) 2022.05.12 Spring Boot | Querydsl, Gradle 설정하기 (Eclipse) (2) 2021.10.19