본문 바로가기
JAVA

Sql In, Not In 절 (JDBC JPA) QueryDsl 활용

by fouink 2023. 1. 17.

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

댓글