JPQL 을 만들어주는 builder 이다. 최종적으로는 JPQL 로 변환된다. 즉, 코드로 JPQL 을 작성할 수 있으며, 코드 작성 단계에서 문법적 에러를 확인할 수 있다.
@BeforeEach
public void before(){
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);
}
우선 @BeforeEach로 임의의 데이터를 영송석 컨텍스트에 저장해둔다.
username이 'member1'인 것을 찾아보자.
@Test
public void startJPQL(){
//member1을 찾아라.
Member findMember = em.createQuery("select m from Member m where m.username =:username", Member.class)
.setParameter("username","member1")
.getSingleResult();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
@Test
public void startQuerydsl(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Member findMember = queryFactory
.select(member)
.from(member)
.where(member.username.eq("member1")) //파라미터 바인딩 처리
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
1.파라미터 바인딩 자동으로 잡아준다.
2.jpql은 문자로 작성되지만, querydsl은 컴파일 시점에 문법오류를 잡아주고 코드어시스턴스도 사용가능
3.static import 처리 해서 사용가능 -> 원래는 Qmember.member인데 member로 사용