본문 바로가기
[IT]/Querydsl

[QueryDSL] Query DSL 기본문법

by dop 2021. 3. 26.

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 데이터 순서 부여

 

 

코드 어시스턴트가 더 많이 알고있으니, 이상으로 포스팅을 마치도록 하겠습니다.

 

728x90