카테고리 102

[QueryDsl] Case문, 상수 출력, 특정 문자값 붙여 출력하기

QueryDsl Case문 예제 쿼리를 사용할 때, 경우에 따라 다른 값으로 치환을 Data에서 바로 할 경우가 있다. 주로 화면에 Fit하게 가져올 때 사용할 것 같은데 DB는 그냥 퍼올려서 Stream으로 Dto생성해서 처리하는것보다 좋을지는 역시나 고민해봐야할 문제 기본 CASE문, caseBuilder CASE문 간단한 Case문 그냥 when(경우).then(치환글) 만 사용하면 된다. 말 그대로 간단한 경우 @Test public void basicCase() throws Exception { List result = queryFactory .select(member.age .when(10).then("열살") .when(20).then("스무살") .otherwise("기타")) .from(..

스프링/QueryDsl 2022.03.10

[QueryDsl] 서브쿼리 사용하기

앞서서, 서브쿼리 사용시 생각해야할 점 현재 from절에서 서브쿼리가 불가능하다. 원인 JPA JPQL에서 from 절의 서브쿼리를 지원하지 않기 때문에, JPQL 기반의 QueryDsl도 지원되지 않는다. 하이버네이트 구현체를 사용하면(JPAExpressions) select절의 서비 쿼리는 지원한다. from절의 서브쿼리 해결 방안 3가지로는 서브쿼리를 join으로 변경 시도 app에서 쿼리를 분리해서 2번 실행하여 거름 nativeSQL을 사용하기 💢그러나 from절에서 서브쿼리를 사용하는 많은 이유 두 가지는 화면에 완전 Fit하게 가져오기 위해 성능상의 이유로 단 한번의 query만 날려 가져오게 하기 위해 정도로 구분할 수 있는데, 과연 DB에서 순수하게 Data를 가져오는 역할을 시켜서 재사..

스프링/QueryDsl 2022.03.10

[QueryDsl] Join + On절 + Fetch join

기본적인 상관관계 Entity Join 기본적인 queryDsl 객체를 사용한 join 사용법 publicQ leftJoin(EntityPathtarget, Pathalias) join을 걸고싶은 Entity의 연관관계 대상과 alias를 적어준다. (물론 QueryDsl의 Q객체들) member.team처럼 내부 선언 연관관계 대상을 join에 적어주면 알아서 Team Table에서 outerJoin한다. /** * * Team A에 속한 모든 회원을 leftjoin하는 방법. */ @Test public void join() throws Exception { List result = queryFactory .selectFrom(member) .leftJoin(member.team, team) .whe..

스프링/QueryDsl 2022.03.08

[QueryDsl] 정렬, 페이징, Tuple을 이용한 특정 값 Select (max,min,avg,sum 등)

QueryDsl 정렬 예시 나이가 100살의 멤버중, 나이로 내림차순, 이름으로 올림차순인데 null이 마지막으로 뽑기 null을 먼저 뽑는 것도 있다. nullsFirst() /** * 회원 정렬 * 1. 회원 나이 내림차순(desc) * 2. 회원 이름 올림차순(asc) * 단 2에서 회원 이름이 없으면 마지막에 출력(nulls last) 대박 */ @Test public void sort() throws Exception { List result = queryFactory.selectFrom(member) .where(member.age.eq(100)) .orderBy(member.age.desc(), member.username.asc().nullsLast()) .fetch(); /* select..

스프링/QueryDsl 2022.03.06

[Querydsl] 다양한 Fetch 결과 받아보기

기본 fetch //fetch List fetch = queryFactory .selectFrom(member) .fetch(); 단건 조회 fetchOne //fetchOne queryFactory .selectFrom(member) .fetchOne(); 다건이지만, 처음 것만 가져오기 fetchFirst //fetchFirst queryFactory .selectFrom(member) .fetchFirst(); 페이징,count 포함 fetchResults //fetchResult 페이징,count 포함 QueryResults pagingResult = queryFactory .selectFrom(member).limit(5).offset(0) .fetchResults(); pagingResult...

스프링/QueryDsl 2022.03.05

[QueryDsl] QueryDsl 기본 사용법, 검색 유형별 예시

JPAQueryFactory(EntityManager)로 query를 만든다. 기존 JPQL로 제작할 때, @Test public void startJPQL() throws Exception { //member1을 찾아라 Member findByJPQL = em.createQuery("select m from Member m where m.username = :username", Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(findByJPQL.getUsername()).isEqualTo("member1"); }QueryDsl을 도입하게 되면? java로 쿼리를 실행시킬 수 있어, Runtime때 오류를 ..

스프링/QueryDsl 2022.03.05

[QueryDsl] QueryDsl 설정방법

QueryDsl 설정방법 QueryDsl은 기존 dependency들을 추가하는 경우와 다르게 설정파일들을 조금 손봐줘야한다. 최신 스프링5 버전에서 사용하기 위해 설정하지 않으면 Unable to load class 'com.mysema.codegen.model.Type' compileQuerydsl 에러가 난다. plugin 추가 라이브러리 추가 각종 dir, config ************************************************************** buildscript { ext { queryDslVersion = "5.0.0" } } *************************************************************** plugins {..

스프링/QueryDsl 2022.03.03