JPA

QueryDSL 소개

쿠카이든 2022. 2. 15. 11:17
728x90
  • QueryDSL 소개
    • 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크입니다.
    • 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있습니다.
      • IDE의 코드 자동 완성 기능 사용 가능
      • 문법적으로 잘못된 쿼리를 허용하지 않음(오류 체크)
      • 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음 등 의 특징을 가집니다.
//member, order 테이블에서 OrderStatus의 상태와 MemberName의 이름에 따라 값을 조회
public List<Order> findAll(OrderSearch orderSearch) {
    
    QOrder order = QOrder.order;
    QMember member = QMember.member;
    
    return query
        .select(order)
        .from(order)
        .join(order.member, member)
        .where(statusEq(orderSearch.getOrderStatus()),
               nameLike(orderSearch.getMemberName()))
        .limit(1000)
        .fetch();
}

private BooleanExpression statusEq(OrderStatus statusCond) {
    if (statusCond == null) {
        return null;
    }

    return order.status.eq(statusCond);
}

private BooleanExpression nameLike(String nameCond) {
    if (!StringUtils.hasText(nameCond)) {
        return null;
    }
    return member.name.like(nameCond);
}
  • Querydsl의 장점은 동적 쿼리의 오류를 컴파일 시점에 빠르게 잡음으로써, 실제 운영시에 발생하는 오류를 최소화 시킬 수 있다는 점에 있습니다. 또한,
    • 직관적인 문법
    • 코드 자동완성
    • 코드 재사용
    • JPQL new 명령어와는 비교가 안될 정도로 깔끔한 DTO 조회를 지원한다는 점에서 여러 장점이 존재합니다.
728x90

'JPA' 카테고리의 다른 글

(Spring data JPA) 쿼리 메소드란?  (0) 2022.02.15
스프링 데이터 JPA 란?  (0) 2022.02.15
페치 조인(fetch join) 의 활용  (0) 2022.02.14
회원등록 API v1, v2 차이  (0) 2022.02.14
변경 감지(dirty check)와 병합(merge)  (0) 2022.02.14