[QueryDSL] 정렬과 페이징
·
QueryDSL
데이터가 많아질수록 정렬과 페이징은 필수적인 기능이다.이번 장에서는 QueryDSL을 활용해 정렬(orderBy)과 페이징(offset, limit)을 처리하는 방법과 페이징 실제 예시를 알아볼 것이다. 1. 정렬 — orderBy()다음 조건으로 회원을 정렬한다고 가정하자.나이는 내림차순(desc)이름은 오름차순(asc)이름이 없는(null) 회원은 마지막에 정렬(nullsLast)@Testpublic void sort() { em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory ..
[QueryDSL] 결과 조회
·
QueryDSL
QueryDSL로 쿼리를 작성할 때 마지막에 붙는 fetch(), fetchOne(), fetchFirst(), fetchResults(), fetchCount() 등의 메서드는 결과를 어떻게 가져올지를 결정한다.이번 글에서는 각 메서드의 차이와 실제 동작 방식을 코드와 함께 정리해본다. fetch() - 리스트 조회List result = queryFactory .selectFrom(member) .fetch();결과를 리스트로 반환한다.조회 결과가 없으면 빈 리스트([])를 반환한다.JPQL의 getResultList()와 동일한 개념이다.가장 일반적으로 사용되는 조회 메서드다. fetchOne() - 단건 조회Member findMember = queryFactory ..
[QueryDSL] 검색 조건 쿼리
·
QueryDSL
QueryDSL의 진짜 장점은,쿼리를 자바 코드로 읽고 쓸 수 있다는 점이다. 이번 장에서는 QueryDSL로 검색 조건 쿼리(where) 를 작성하는 방법을 알아볼 것이다. 1) 기본 준비 — QueryFactory 생성QueryDSL은 JPAQueryFactory를 통해 쿼리를 작성한다.즉, JPA의 EntityManager를 기반으로 동작하기 때문에아래와 같이 QueryFactory를 초기화해야 한다.@AutowiredEntityManager em;JPAQueryFactory queryFactory;@BeforeEachvoid before() { queryFactory = new JPAQueryFactory(em);}이 한 줄이 있어야 이후 모든 QueryDSL 코드가 동작한다. 2) 예제 1..
[QueryDSL] QueryDSL과 빠른 세팅 방법
·
QueryDSL
Spring Data JPA만으로도 대부분의 서비스는 충분하다.간단한 CRUD나 단순 조회 쿼리는 메서드 이름만으로 금방 해결된다.하지만 조금만 복잡해지면 상황이 달라진다. 조건이 여러 개인 동적 쿼리,여러 테이블을 엮는 복잡한 조인,필요한 필드만 조회하는 프로젝션,그리고 성능을 위한 페치 조인까지 들어가면문자열 기반 JPQL은 한계가 금방 드러난다. 이럴 때 필요한 것이 바로 QueryDSL이다.QueryDSL은 컴파일 시점에 오류를 잡아주는 타입 안전 쿼리 빌더로,IDE 자동완성과 높은 가독성을 제공한다.즉, 복잡한 조건도 안전하고 깔끔하게 작성할 수 있다. 따라서 오늘은 QueryDSL을 빠르게 세팅하는 방법에 대해 알아볼 것이다. 1. build.gradle 설정먼저 build.gradle 파일에..