IT 소스/MyBatis

[MyBatis] <choose>, <when>, <otherwise> - 조건구문

한량이야기 2024. 2. 3. 00:28
반응형

안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.

<choose>, <when>, <otherwise> - 조건구문

 

<choose>는 스위치 문을 생성하는 데 사용되며,

이를 통해 <when> 또는 <otherwise> 조건을 선택할 수 있습니다.

<when> 태그는 조건을 지정하고,

'true'로 평가되면 해당 SQL이 실행됩니다.

<when> 조건 중 어느 것도 충족되지 않으면

<otherwise> 태그가 기본 옵션을 제공합니다.

 

'<if> 태그'에서 존재하지 않는 'else if' 또는 'else'

대한 구문은 사용할 수 있게 해 줍니다.

 

1. <choose>, <when>, <otherwise> 태그의 구문 및 사용법

<choose>
    <when test="조건식1">
        <!-- 조건식1이 참일 때 실행되는 SQL -->
    </when>
    <when test="조건식2">
        <!-- 조건식2가 참일 때 실행되는 SQL -->
    </when>
    <when test="조건식3">
        <!-- 조건식3이 참일 때 실행되는 SQL -->
    </when>
    <!-- otherwise 태그는 선택사항입니다. -->
    <otherwise>
        <!-- 어떤 조건도 참이 아닐 때 실행되는 기본 SQL -->
    </otherwise>
</choose>

 

<choose> 태그는 각각 고유한 조건을 갖는

여러 개의 <when> 태그를 포함시킬 수 있습니다.

<when> 조건이 하나도 충족되지 않는 시나리오에 대해

선택적 <otherwise> 태그를 포함할 수 있습니다.

 

2. <choose>, <when>, <otherwise> 태그의 사용 예제

<select id="getUserData" parameterType="String" resultType="User">
    <choose>
        <when test="userRole == 'ADMIN'">
            SELECT * FROM users WHERE role = 'ADMIN'
        </when>
        <when test="userRole == 'MANAGER'">
            SELECT * FROM users WHERE role = 'MANAGER'
        </when>
        <otherwise>
            SELECT * FROM users WHERE role NOT IN ('ADMIN', 'MANAGER')
        </otherwise>
    </choose>
</select>

위 예제는 'userRole'의 값에 따라 실행되는 SQL 쿼리가 달라집니다.

 

'userRole'의 변수 값이 'ADMIN'이면

SELECT * FROM users WHERE role = 'ADMIN' 실행되어서

users의 테이블의 관리자만 조회됩니다.

 

'userRole'의 변수 값이 'MANAGER'이면

SELECT * FROM users WHERE role = 'MANAGER' 실행되어서

users의 테이블의 매니저만 조회됩니다.

 

'userRole'의 변수 값이 'ADMIN'과 'MANAGE'가 아닐 경우

SELECT * FROM users WHERE role NOT IN ('ADMIN', 'MANAGER') 실행되어서

users의 테이블의 일반 사용자만 조회됩니다.

 

반응형