본문 바로가기

Spring

QueryDSL 기본문법

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절 안에는 여러 검색 조건이 사용 가능하다.

    • 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()와 같은 형태로 사용한다.

https://heekng.tistory.com/160