본문 바로가기

Spring/Querydsl

Querydsl- Q 인스턴스

Q 인스턴스 사용법 2 가지

QMember member = new QMember("m")  // 별칭 직접 지정
QMember member = QMember.member  // 기본 인스턴스 사용

 일반적으로 기본 인스턴스를 주로 사용한다. 기본 인스턴스와 static import를 사용하면 훨씬 sql 느낌이 나는 직관적인 코드를 작성할 수 있다.

예시 (기본 인스턴스 + static import)

package study.querydsl;

import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Member;
import study.querydsl.entity.QMember;
import study.querydsl.entity.Team;

import javax.persistence.EntityManager;
import java.util.List;

import static org.assertj.core.api.Assertions.*;
import static study.querydsl.entity.QMember.*;

@SpringBootTest
@Transactional
public class QuerydslBasicTest {
    @Autowired
    EntityManager em;
    JPAQueryFactory queryFactory;

    @BeforeEach //각 테스트마다 데이터 주입
    public void each(){
    	JPAQueryFactory queryFactory = new JPAQueryFactory(em);
    
        Team teamA = new Team("teamA");
        Team teamB = new Team("teamB");
        em.persist(teamA);
        em.persist(teamB);

        Member member1 = new Member("member1", 10, teamA);
        Member member2 = new Member("member2", 20, teamA);

        Member member3 = new Member("member3", 30, teamB);
        Member member4 = new Member("member4", 40, teamB);
        em.persist(member1);
        em.persist(member2);
        em.persist(member3);
        em.persist(member4);
    }

    @Test
    public void startQuerydsl() throws Exception{
        Member findMember = queryFactory
                .select(member)
                .from(member)
                .where(member.username.eq("member1"))  // 파라미터 바인딩 처리
                .fetchOne();

        assertThat(findMember.getUsername()).isEqualTo("member1");
    }
}

 여기서 public void startQuerydsl()의 member는 사실 QMember.member(기본 인스턴스)이다. QMember.member에서 QMember는 static import로 빼버려서 member로 깔끔하게 나타낼 수 있던 것이다.

'Spring > Querydsl' 카테고리의 다른 글

Querydsl- 조인  (0) 2023.07.27
Querydsl- 집합  (0) 2023.07.26
Querydsl- 정렬과 페이징  (0) 2023.07.25
Querydsl- Jpql과 Querydsl 비교  (0) 2023.07.22
Querydsl- build.gradle 설정  (0) 2023.07.22