[Mybatis] 동적 SQL when 예제

<when> 요소는 MyBatis에서 동적 SQL을 생성할 때 사용되며, <choose><if>와 함께 조건에 따라 SQL 조각을 동적으로 생성할 수 있습니다. <when> 요소는 특정 조건을 만족할 때 SQL 조각을 실행하는데 사용됩니다. 아래에 간단한 <when> 예제를 제공하겠습니다.

가령, “orders” 테이블에서 주문의 검색 조건에 따라 동적으로 SQL 쿼리를 생성하는 상황을 가정해봅시다. 사용자는 선택적으로 “status”와 “customer_id” 조건을 지정할 수 있습니다. 조건이 제공되면 해당 조건을 포함한 쿼리를 실행하고, 조건이 없으면 모든 주문을 조회하는 쿼리를 실행하려고 합니다.

MyBatis에서 이를 구현하려면 다음과 같이 <when> 요소를 사용할 수 있습니다.

<select id="selectOrders" resultType="your.package.Order">
    SELECT * FROM orders
    <where>
        <if test="status != null">
            <when test="status == 'Shipped'">
                AND order_status = 'Shipped'
            </when>
            <when test="status == 'Pending'">
                AND order_status = 'Pending'
            </when>
        </if>
        <if test="customer_id != null">
            AND customer_id = #{customer_id}
        </if>
    </where>
</select>` 

위의 예제에서는 <if>와 함께 <when> 요소를 사용하여 조건에 따라 다른 SQL 조각을 생성합니다. 만약 “status” 조건이 제공되면, 해당 조건에 따라 다른 <when> 요소가 실행됩니다.

이제 selectOrders 쿼리를 호출할 때, 파라미터로 “status”와 “customer_id”를 전달하면 해당 조건에 맞는 주문을 조회할 수 있습니다. 조건이 없는 경우엔 모든 주문을 조회하는 쿼리가 실행됩니다.