JPA/실전! Querydsl 12

프로젝션과 결과 반환 DTO 조회 (JPA VS Querydsl)

순수 JPA에서 DTO조회 MemberDto package study.querydsl.dto; import lombok.Data; @Data public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } @Test @Test public void findDtoByJPQL(){ List result = em.createQuery("select new study.querydsl.dto.MemberDto(m.username, m.age) from Member m", MemberDto.class..

querydsl 서브쿼리

com.querydsl.jpa.JPAExpressions 사용 서브 쿼리 eq 사용 - 나이가 가장 많은 회원 조회 서브 쿼리 goe 사용 select 절에 subquery static import 활용 from 절의 서브쿼리 한계 JPA JPQL 서브쿼리의 한계점으로 from 절의 서브쿼리(인라인 뷰)는 지원하지 않는다. 당연히 Querydsl 도 지원하지 않는다. 하이버네이트 구현체를 사용하면 select 절의 서브쿼리는 지원한다. Querydsl도 하이버네이트 구현체를 사용하면 select 절의 서브쿼리를 지원한다 from 절의 서브쿼리 해결방안 서브쿼리를 join으로 변경한다.(가능한 상황도 있고, 불가능한 상황도 있다.) 애플리케이션에서 쿼리를 2번 분리해서 실행한다. nativesSQL을 사용..

querydsl 조인 - 기본조인

1. 기본 조인 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 된다. /* * 팀 A에 소속된 모든 회원 * */ @Test public void join(){ List result = queryFactory .selectFrom(member) .leftJoin(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } join( ) , innerJoin( ) :내부 조인(inner join) leftJoin( ) : left..

querydsl 정렬

desc( ) : 내림차순 asc( ) : 올림 차순 nullsLast( ) , nullsFirst( ) : null 데이터 순서부여 /* * 회원 정렬 순서 * 1. 회원 나이 내림차순(desc) * 2. 회원 이름 올림차순(asc) * 단 2에서 회원 이름이 없으면 마지막에 출력(nuls last) * * */ } @Test public void sort(){ em.persist(new Member(null, 100)); em.persist(new Member("member5", 100)); em.persist(new Member("member6", 100)); List result = queryFactory .selectFrom(member) .where(member.age.eq(100)) .ord..

결과 조회

1. 결과 조회 fetch( ) : 리스트 조회 , 데이터 없으면 빈 리스트 반환 fetchOne( ) : 단 건 조회 결과가 없으면 : null 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException fetchFirst( ) : limit(1) . fetchOne( ) fetchResults( ) : 페이징 정보 포함, total count 쿼리 추가실행 fetchCount( ) : count 쿼리로 변경해서 count 수 조회 @Test public void resultFetch(){ List fetch = queryFactory .selectFrom(member) .fetch(); //멤버에 목록을 리스트로 조회 Member fetchOne = query..

Spring Boot, Gradle 환경에 Querydsl 설정

queryDslVersion이 변경되어 Gradle 설정 하는데 시간이 좀 걸렸다 .. buildscript{ ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'java' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' configurations { compileOnly ..