public void startJPQL() {
// JPQL로 먼저 써보기 !!
String qlString = "select m from Member m where m.username= :username";
// 1. member1을 찾아라
Member findMember = em.createQuery(qlString, Member.class)
.setParameter("username", "m1")
.getSingleResult();
Assertions.assertThat(findMember.getUsername()).isEqualTo("m1");
}
public void startQuerydsl() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QMember m = new QMember("m");
Member findMember = queryFactory
.select(m)
.from(m)
.where(m.username.eq("m1"))
.fetchOne();
Assertions.assertThat(findMember.getUsername()).isEqualTo("m1");
}
JPQL은 qlString
변수에서 확인할 수 있듯이, 항상 쿼리를 문자열로 작성하게 된다.
:username
과 같이 파라미터 바인딩이 필요함 → QueryDsl은 바인딩없이 참조로 자동으로 해결 가능code assistance
QueryDsl이 JPQL의 빌더라고 생각하면 좋은듯
동적 쿼리
같은 게시판 목록 조회 쿼리 내에서 카테고리, 검색어, 페이지, 정렬 조건 등등 결과물이 달라져야 할때, JPA에서는 이러한 동적으로 변하는 쿼리를 QueryDSL로 처리한다.