본문 바로가기

CS 잡지식

Querydsl 사용 템플릿

1. 먼저, 각강의 엔티티에 대해서 QType을 생성.

2. 아래 4가지 방법으로 기본적으로 Querydsl 사용 준비를 한다. 

@SpringBootTest
@Transactional
public class QuerydslBasicTest {

    @Autowired
    EntityManager entityManager;

    // 필드에서 선언!
    JPAQueryFactory queryFactory;  

    @BeforeEach
    void beforeEach(){
		
        // 생성 메서드 같은 거을 따로 만들어서 초기화!
        queryFactory = new JPAQueryFactory(entityManager);
		
        //이하 생략
      
    }


    @Test // Querydsl 사용법 1]
    void startQuerydslV1(){
		
        // 여기서 JpAQueryFactory 생성하는 방법!
        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);

        QMember m = new QMember("m");

        // JPQL과는 다르게, java 코드로 작성을 했다. -> 컴파일 타임 때, 오류를 알려 줌!!!(이 부분이 Querydsl의 막강한 장점)
        Member member1 = queryFactory
                .select(m)
                .from(m)
                .where(m.username.eq("member1")) //파라미터 바인딩 처리
                .fetchOne();

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

    @Test// Querydsl 사용법 2]
    void startQuerydslV2(){

        QMember m = new QMember("m");

       
        Member member1 = queryFactory
                .select(m)
                .from(m)
                .where(m.username.eq("member1")) //파라미터 바인딩 처리
                .fetchOne();

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

    @Test  // Querydsl 사용법 3]
    void startQuerydslV3(){

        QMember m = QMember.member; // ==  QMember m = new QMember("mermber1")

        Member member1 = queryFactory
                .select(m)
                .from(m)
                .where(m.username.eq("member1")) //파라미터 바인딩 처리
                .fetchOne();

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

    @Test  // Querydsl 사용법 4] 가장 권장함
    void startQuerydslV4() {

        Member member1 = queryFactory
                .select(QMember.member) // Static import로 더 깔끔히 가능
                .from(QMember.member)
                .where(QMember.member.username.eq("member1")) //파라미터 바인딩 처리
                .fetchOne();

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


    }