본문 바로가기
java/queryDsl

queryDsl, jpql 차이점

by 일상코더 2022. 11. 22.
package com.sparta.querydsl.entity;


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 javax.persistence.EntityManager;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
@Transactional
public class QueryDslBasicTest {

    @Autowired
    EntityManager em;

    JPAQueryFactory queryFactory;


    //테스트 실행전에 데이터를 미리 세팅
    @BeforeEach
    public void before(){
        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);
    }

    //jpql 사용
    //오류가 있어도 일단 컴파일이된다 -> 컴파일된후에 오류를 찾을수 있다.
    @Test
    public void startJPQL(){
        //member1을 찾아라.
        String qlString = "select m from Member m" +
                          " where m.username = :username";

        Member findMember = em.createQuery(qlString, Member.class)
                .setParameter("username", "member1") //파라미터 바인딩
                .getSingleResult();

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

    //queryDsl 사용
    //오류가 생기면 컴파일 시점에서 잡아준다.
    //파라미터 바인딩을 자동으로 해결해준다.
    @Test
    public void startQuerydsl(){
        //별칭 직접 주기
        //QMember m = new QMember("m");
        //static import 사용 깔끔하다
        Member findMember = queryFactory
                .select(member)
                .from(member)
                .where(member.username.eq("member1")) //파라미터 바인딩 처리
                .fetchOne();
        assert findMember != null;
        assertThat(findMember.getUsername()).isEqualTo("member1");
    }
}

'java > queryDsl' 카테고리의 다른 글

offset  (0) 2022.11.28
queryDsl 기본 테스트 코드  (1) 2022.11.22

댓글