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 |