Querydsl은 엔티티 클래스에 해당되는 Q 도메인 클래스를 만들어서 타입 세이프한 쿼리를 작성할 수 있도록 도와주는 역할을 합니다.
타입 세이프한 쿼리라는 것은 컴파일 시점에 쿼리의 타입 불일치를 잡아낼 수 있기 때문에 런타임 에러가 발생할 확률을 줄일 수 있습니다. 또한 Q 도메인 클래스를 이용해 쿼리를 작성할 수 있으므로 가독성 향상의 효과가 있습니다.
하단의 코드는 Querydsl의 Q 도메인 클래스를 활용하여 동적 쿼리문을 작성한 코드입니다. 해당 코드를 보면 확인할 수 있듯이 직접 JPQL 쿼리를 작성하는 것보다 가독성이 좋고 문제가 생길 위험도가 줄어들게 됩니다.
default List<Product> findProductsByDynamicQuery(String nickname, Long categoryId, String productStatus, Integer startPrice, Integer endPrice, Integer maxAge, String keyword) {
QProduct product = QProduct.product;
BooleanBuilder builder = new BooleanBuilder();
if (nickname != null) {
builder.and(product.member.nickname.eq(nickname));
}
if (categoryId != null) {
builder.and(product.units.any().category.categoryId.eq(categoryId));
}
if (productStatus != null) {
builder.and(product.status.eq(ProductStatus.valueOf(productStatus)));
}
if (startPrice != null) {
builder.and(product.totalPrice.goe(startPrice));
}
if (endPrice != null) {
builder.and(product.totalPrice.loe(endPrice));
}
if (maxAge != null) {
builder.and(product.maxAge.loe(maxAge));
}
if (keyword != null) {
builder.and(product.title.contains(keyword));
}
return (List<Product>) findAll(builder);
}
장점도 많지만 Querydsl은 외부 라이브러리이기 때문에 Spring boot에서 적용하기 위해서는 버전과 개발환경에 맞춰서 적용 방법이 전부 다르다는 단점도 존재합니다.
'Backend' 카테고리의 다른 글
Spring data jpa를 이용한 Pagination (1) | 2024.03.25 |
---|---|
SQLRestriction 얼마나 아시나요? (0) | 2024.03.22 |
Stomp Message broker - Kafka로 변환하기 (2) Topic, Listener 동적 생성 (0) | 2024.03.21 |
Stomp Message broker - Kafka로 변환하기 (1) Configuration (0) | 2024.03.21 |
파이프라인 개선 안 - 로그 뷰어 (0) | 2024.03.21 |