Spring
QueryDSL 기본문법
nanoh
2024. 4. 18. 08:58
728x90
1. Q-Type
- Q-Type 인스턴스를 사용하는 방법은 2가지 방법이 있다.
QMember qMember = new QMember("m"); // 별칭 직접 지정 QMember qMember = QMember.member; // 기본 인스턴스 사용
직접 별칭을 넣어서 사용해도 괜찮지만 기본 인스턴스에서 생성된 별칭을 사용하는 것을 권장한다.
별칭을 직접 지정하는 방법은 같은 테이블을 조인하는 경우에 쓰인다.
2. 검색 조건
Member findMember = queryFactory
.selectFrom(member)
.where(member.username.eq("member1").and(member.group.eq("class1")))
.fetchOne();
where절에는 and나 or을 사용할 수 있다.
and 연산의 경우 , 을 이용해 간단하게 사용할 수 있다.
- where(member.username.eq("member1"),
member.group.eq("class1")) - 또한 해당 검색조건이 null일 경우 무시하여 동적 쿼리를 깔끔하게 구성이 가능하다.
- where(member.username.eq("member1"),
where절 안에는 여러 검색 조건이 사용 가능하다.
- eq(): A = ?
- ne(): A != ?
- eq().not(): A != ?
- isNotNull(): A is not null
- in(): A in (?)
- notIn(): A not in (?)
- between(): A between ?, ?
- goe(): A >= ?
- gt(): A > ?
- loe(): A <= ?
- lt(): A < ?
- like(): A like ?
- contains(): A like "%?%"
- startWith(): A like "?%?
결과조회
fetch() : 리스트를 조회한다. 값이 없는 경우 빈 리스트 반환
fetchOne() : 단 건 조회
- 결과가 없는 경우 null리턴
- 결과가 둘 이상인 경우 NonUniqueResultException 발생
fetchFirst() : limit(1).fetchOne()과 동일
fetchResults() : 페이징 정보를 포함하여 total count쿼리를 추가로 실행
- 이후 getTotal()과 getResult()메서드로 정보를 조회할 수 있다.
fetchCount() : count쿼리로 변형해 count수를 조회한다.
3. 페이징
QueryResults<Member> queryResults = queryFactory
.selectFrom(member)
.orderBy(member.username.desc())
.offset(1)
.limit(2)
.fetchResults();
- offset(): 시작점을 설정한다.
- limit(): 최대 조회 수를 설정한다.
- listResults(): QueryResults타입으로 리턴받는다.
- QueryResults.getTotal(): 전체 수 조회
- QueryResults.getLimit(): limit 조회
- QueryResults.getOffset(): offset 조회
- QueryResults.getResults(): 결과값 조회
- 정렬
- 정렬은 orderBy를 사용
- asc(): 오름차순 정렬
- desc(): 내림차순 정렬
- nullsLast(), nullsFirst: null값의 위치를 설정한다.
- asc().nullsLast()와 같은 형태로 사용한다.