JPAQueryFactory
클래스이름에 Q가 붙은 이상한(?) 것을 만든 것처럼 Query DSL은 EntityManager말고도 한 가지가 더 필요하다.
JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(em);
위와같이 선언해서 사용한다. Test 코드에서 활용한다면, 다음과 같이 사용하면 모든 테스트 메소드에서 초기화 없이 사용할 수 있다.
@Autowired
EntityManager em;
JPAQueryFactory queryFactory;
@BeforeEach
public void createQF() {
queryFactory = new JPAQueryFactory(em);
}
기본 Q-Type 활용
다음은 Q클래스 인스턴스를 사용하는 2가지 방법이다.
QMember qMember = new QMember("m");//별칭 지정
QMember qMember = QMember.member;//기본 인스턴스 사용
※ QMember를 static import하면 QMember.member를 member로 사용할 수 있다.(대신에 member라는 변수명을 사용하지 않도록 유의하도록 하자.)
검색 조건 쿼리
- select()
- from()
- selcetFrom() (select + from 한번에 처리)
- where(), and(), or()
- orderBy()
(이 외에도 JPQL문법을 모두 사용 가능)
Member findMember = jpaQueryFactory
.select(m)
.from(m) //selectFrom(m)으로 치환 가능
.where(m.id.eq(1L)).and(m.age.eq(20))
.fetchOne();
동일성 체크
- eq(), ne(), not() // == , != ,!= (not은 마지막에 붙여준다.)
- isNotNull() // Null이 아니면 true
원소, 범위 체크
- in(1,2,3,4), notIn(1,3,5), between(10,20) // 원소에 있는경우, 원소에 없는경우, 10 ~ 20 사이
- x.goe(y); (x >= y)
- x.gt(y); (x > y)
- x.loe(y); (x <= y)
- x.lt(y); (x < y)
그 외
- like("str%"); (like 검색)
- contains("str"); (like %str%)
- startsWith("str"); (like str%)
결과 조회
- fetch(); 리스트 조회 없으면 빈 리스트 반환
- fetchOne(); 단일 객체 반환, 없으면 null, 둘 이상이면 NonUniqueResultException
- fetchFirst(); 가장 먼저 찾는걸 반환
- fetchResults(); 페이징 정보 포함, total 쿼리 추가 실행 / 페이징이 아니라면 지양
- fetchCount(); count쿼리로 갯수 조회 (long형)
정렬
- desc(), asc()
- nullsLast(), nullsFirst() // null 데이터 순서 부여
코드 어시스턴트가 더 많이 알고있으니, 이상으로 포스팅을 마치도록 하겠습니다.
'[IT] > Querydsl' 카테고리의 다른 글
[Query DSL] package com.querydsl.core.types does not exist (0) | 2021.04.17 |
---|---|
[QueryDSL] JPQL vs Query DSL (0) | 2021.03.26 |
[QueryDSL] 인텔리제이 환경설정 (0) | 2021.03.26 |