QueryDSL의 PagingSpring Data JPA와 QueryDSL을 활용한 페이징에 대해 작성해보려고 한다.Spring Data JPA를 사용하여 JPARepository를 상속받으면서, 동시에 사용자 정의 repository를 동시에 상속을 받아야 한다.Java에서 Class는 다중 상속을 지원하지 않기 때문에, 다중 상속이 가능한 인터페이스를 활용한다.JPARepository와 사용자 정의 Repository를 작성하는 방법은 아래 글에 자세히 적어놓았으니 참고하면 좋을 것 같다.2023.11.24 - [JPA/Spring Data JPA] - [Spring Data Jpa] 6. 사용자 정의 리포지토리 구현 (*중요) 추후 queryDSL 활용 [Spring Data Jpa] 6. 사용자 ..
동적 쿼리동적 쿼리는 애플리케이션에서 매우 흔하게 마주치는 요구 사항 중 하나다.과거 자바 애플리케이션에서 쿼리를 동적으로 수정하는 것은 거의 불가능에 가까웠었다.QueryDSL은 이러한 동적 쿼리를 처리하는 강력한 방법을 제공한다. 이번 글에서는 BooleanBuilder를 활용하여 동적 쿼리를 구성하는 방법을 알아보겠다.방법1. BooleanBuilder를 통한 조건 구성BooleanBuilder란?BooleanBuilder는 QueryDSL에서 제공하는 조건을 동적으로 구성할 수 있는 편리한 클래스이다.쿼리의 조건문(where 절)을 조건에 따라 유연하게 변경할 수 있게 해준다. 이를 통해 코드의 가독성을 유지하면서도 복잡한 조건 로직을 쉽게 구현할 수 있다. 동적 쿼리 구현 예제 다음은 Bool..
프로젝션과 결과 반환 - 기본값의 반환 타입이 여러개이므로 Tuple형태이다.Tuple은 QueryDSL 전용 타입이다.아래의 데이터 반환 타입이 Repository단계에서 해결되는 것이 좋지, 실제 비즈니스 로직인 Service에 해당 데이터 타입이 넘어가는 것은 좋지 않다.List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); 프로젝션과 결과 반환 - DTO 사용 - JPQLList resultList = em.createQuery("select new querydsl.querydsl.dto.MemberDto(m.username, m.age) " ..
설명의 편의를 위해 예시를 둔다.회원의 나이대로 내림차순하는데, 회원 이름으로 올림차순하며, 회원 이름이 없다면 마지막에 출력한다면 쿼리를 어떻게 해야할까?// sample dataem.persist(generateMember(null, 100, null));em.persist(generateMember("member5", 100, null));em.persist(generateMember("member6", 100, null));QueryDSL 쿼리List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.us..
QueryDSL 의존성Spring Version에 따라 의존성이 크게 차이가 난다. 나는 스프링 3.x 이상에서 학습을 했기에, 아래와 같이 설정을 했다.//Querydslimplementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persistence:jakarta.persistence-api"..