Q클래스 인스턴스를 사용하는 방법은 이전에도 말했듯이 두가지가 있다.
QMember m = new QMember("m"); //alias 필수
QMember m = QMember.member; //static 메서드 사용
이 스태틱 메서드도 내부적으로는 이렇게 구현되어있다.
그리고 위 스태틱 메서드도 아예 스태틱 임포트 해버려도 된다.
import static hello.querydsl.entity.QMember.*;
...
Member findMember = queryFactory
.select(member)
.from(member)
.where(member.username.eq("member1"))
.fetchOne();
그럼 이렇게까지 코드가 줄어든다…!
💡 여기서
member
는 jpql이 생성하는 alias이다. 만약 같은 테이블끼리 조인해서 별칭을 다르게 줘야 할 경우에는 스태틱을 사용하지 말고 직접 생성자로 다른 alias를 주자.
참고로 querydsl은 jpql의 빌더 라이브러리라고 이해하면 된다. querydsl이 생성하는 sql뿐만 아니라, 그 중간단계인 jpql까지 보고 싶다면 다음의 옵션을 추가하자.
use_sql_comments:
spring:
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
use_sql_comments: true #querydsl이 생성하는 jpql확인
#show_sql: true
format_sql: true
@Test
public void search() {
Member findMember = queryFactory
.selectFrom(member)
.where(member.username.eq("member1")
.and(member.age.eq(10)))
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
where절에서 and등을 이용해 검색조건을 강화할 수도 있다. 메서드체인을 활용하자.