MyBatis

<choose>, <when> , <bind>

99duuk 2024. 9. 9. 10:43

 


1. <choose> , <when>  태그

<choose> 태그는 여러 조건 중 하나를 선택하여 SQL을 동적으로 생성할 때 사용함.

<when> 태그는 <choose> 내부에서 사용되며, 특정 조건이 충족될 때 SQL의 일부를 포함시키는 역할을 함.

<choose>
    <when test="조건식1">
        SQL 구문1
    </when>
    <when test="조건식2">
        SQL 구문2
    </when>
    <otherwise>
        기본 SQL 구문
    </otherwise>
</choose>

 

  • <when> 태그의 test 속성: 조건식을 지정함. 이 조건이 true로 평가되면 해당 태그 내부의 SQL 구문이 실행
  • <otherwise> 태그: 모든 <when> 조건이 false일 때 실행될 기본 SQL 구문을 정의

 

 

 

<select id="selectEmployeesByLevel" resultType="Employee">
    SELECT * FROM employees
    WHERE 1=1
    <choose>
        <when test="selType eq 'SUPERIOR'">
            AND employee_level > #{level}
        </when>
        <when test="selType eq 'SUBORDINATE'">
            AND employee_level < #{level}
        </when>
        <otherwise>
            AND employee_level = #{level}
        </otherwise>
    </choose>
</select>

 직원 검색 시 선택된 유형(selType)에 따라 다른 SQL 조건을 적용함

 

 

 

  • selType이 'SUPERIOR'이면 상위 레벨 직원을 선택
  • selType이 'SUBORDINATE'이면 하위 레벨 직원을 선택
  • 그 외의 경우 동일한 레벨의 직원을 선택

 

 


3. <bind> 태그

SQL 맥락에서 사용할 수 있는 새로운 변수를 생성하고 값을 할당하는 데 사용.

복잡한 표현식을 단순화하거나 반복적인 계산을 피하는데 유용

 

<bind name="변수명" value="표현식"/>
  • name 속성: 새로 생성할 변수의 이름을 지정
  • value 속성: 변수에 할당할 값을 정의하는 표현식을 지정
<select id="selectEmployeesByLevel" resultType="Employee">
    <bind name="upLevelCal" value="_parameter.getUpLevel() - 1"/>
    SELECT * FROM employees
    WHERE level = #{upLevelCal}
</select>

직원의 상위 레벨을 계산하여 해당 레벨의 직원들을 선택하는 쿼리

  • _parameter.getUpLevel()을 호출하여 현재 레벨 값을 가져옴
  • 가져온 레벨 값에서 1을 뺌
  • 계산 결과를 upLevelCal이라는 새 변수에 할당
  • SQL 쿼리에서 #{upLevelCal}로 이 값을 사용

 

'MyBatis' 카테고리의 다른 글

계층 쿼리 (중첩 SELECT_mysql, CTE_mysql, CONNECT BY_oracle)  (0) 2024.09.09
@변수명 :=  (0) 2024.09.09
<sql>, <include>, <selectKey>  (0) 2024.09.09
<set>, <where>  (0) 2024.09.09
<if>, <foreach>, <trim>  (0) 2024.09.09