별칭 직접 지정 (DB의 별칭 의미)
→ 참고
QMember qMember = new QMember("m");
기본 인스턴스 사용
QMember qMember = QMember.member;
import static study.querydsl.entity.QMember.member; //...1
@SpringBootTest
@Transactional
public class QuerydslBasicTest {
@PersistenceContext
EntityManager em;
JPAQueryFactory queryFactory;
@BeforeEach
void setUp() {
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);
}
@Test
void startQuerydslStaticImport() {
Member findMember = queryFactory
.select(member) //...1
.from(member) //...1
.where(member.username.eq("member1"))
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
}
QueryDsl 은 결국 JPQL 의 빌더 역할을 합니다. 결과적으로 QueryDsl 을 작성한 코드는 JPQL 로 변환된다고 보면 됩니다.
만약 SQL 말고 실행되는 JPQL 을 보고 싶으면 아래의 프로퍼티를 추가해야 합니다.
spring:
jpa:
properties:
hibernate:
use_sql_comments: true
테스트 코드를 실행하면 JPQL 이 주석으로 생성된 것을 볼 수 있습니다. 이후에는 SQL이 보이구요.
쿼리를 보면 alias 가 member1 로 생성된 것을 볼 수 있는데요, QueryDsl 자체에서 member1 로 만들어서 그렇습니다.