where 문의 or 대신 in을 활용하려 한다.
이유는 or는 인덱스 활용 불가능이고 in은 인덱스를 활용할 수 있어 in 절이 속도 면에서 우위가 있다.
- sql in 절의 특징
sql in ( “1”,”2”) 의 경우는 내부 콤마가 or가 되고.
sql Not In (“1”, “2”)의 경우는 내부 콤마가 and가 된다.
- Query dsl 특징
where(000, 000) 의 경우는 내부 콤마가 and가 된다
- 실제 동적쿼리 적용 코드
@Override
public List<Gift> findByReceiverIdAndStatusOrStatus(String receiverId, AcceptStatus... acceptStatuses) {
List<Gift> kdKDGifts = queryFactory
.select(gift)
.from(gift)
.join(gift.giftProduct, giftProduct)
.orderBy(gift.sendDt.desc())
.where(gift.receiverId.eq(receiverId), gift.status.in(acceptStatuses))
// .where(gift.receiverId.eq(receiverId).and(statusEqOr(acceptStatuses)))
.fetch();
return kdKDGifts;
}
@Override
public List<Order> findByOrderNosOrderStatusNotEqCancel(Set<String> orderNos) {
List<Order> orders = queryFactory
.select(order)
.from(order)
.where(order.orderNo.in(orderNos), order.orderStatusType.notIn("RETURN_DONE", "CANCEL_DONE"))
.fetch();
return orders;
}
실제 쿼리에서도 볼 수 있다시피 where절에 and가 생겼다
결과에서도 in절의 특징들 대로 원하는 값을 도출할 수 있었다.
동적쿼리 작성 시 querydsl은 굉장히 사용하기 좋은 것 같다.
'JAVA' 카테고리의 다른 글
복합키 Entity Update (0) | 2023.09.17 |
---|---|
java Stream 문법 (0) | 2023.01.13 |
QueryDsl 동적쿼리 사용 (SpringBoot, JPA) (0) | 2022.11.25 |
JPA Update Query (0) | 2022.10.28 |
spring boot 웹소켓통신 메세지 ping pong. (0) | 2022.10.02 |
댓글