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");
}
}
댓글