[Mybatis] 동적 SQL choose 예제

<choose> 요소를 사용하여 MyBatis에서 동적 SQL을 생성할 수 있습니다. <choose> 요소는 여러 개의 조건 중에서 첫 번째로 true인 조건에 해당하는 SQL 조각을 생성합니다. <when><otherwise> 요소를 함께 사용하여 다양한 조건에 따른 동적 SQL을 만들 수 있습니다. 아래에 간단한 <choose> 예제를 제공하겠습니다.

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

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

<select id="selectProducts" resultType="your.package.Product">
    SELECT * FROM products
    <where>
        <choose>
            <when test="name != null">
                AND name = #{name}
            </when>
            <when test="category != null">
                AND category = #{category}
            </when>
            <otherwise>
                -- 조건이 없는 경우에 실행될 SQL
            </otherwise>
        </choose>
    </where>
</select>` 

위의 예제에서 사용된 <choose> 요소는 먼저 <when> 요소들을 순차적으로 검사하며, 조건에 해당하는 첫 번째 <when> 요소의 내용을 실행합니다. 만약 어떤 <when> 조건도 true가 아니라면, <otherwise> 내용이 실행됩니다.

이제 selectProducts 쿼리를 호출할 때, 파라미터로 “name” 또는 “category”를 전달하면 해당 조건을 만족하는 제품을 조회할 수 있습니다. 두 조건 중 하나 또는 둘 다 제공되지 않으면 <otherwise>에 정의된 SQL 조각이 실행됩니다.