IT 소스/MyBatis

[MyBatis] <if> - 조건을 만족하면 SQL 코드를 생성

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

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

if tag

 

<if> 태그는 MyBatis에서 동적 SQL을 작성할 때 

사용되는 조건부 태그 중 하나로  test 조건이

충족되면 내부의 SQL 코드를 추가합니다.

 

test 조건은 'true' 또는 'false'로 판단할 수 있는

'boolean'의 조건식으로 되어 있어야 합니다.

 

1. <if> 태그의 구문 및 사용법

<if test="조건식">
    <!-- 조건이 참일 경우 추가할 SQL 코드 -->
</if>

'test'는 평가할 조건식을 지정합니다.

조건이 참일 경우에만 내부의 SQL 코드가 추가됩니다.

 

2. <if> 태그의 사용 예제

<select id="getUserList" resultType="User">
    SELECT * FROM Users
    	WHERE 1 = 1
    <if test="username != null">
       and username = #{username}
    </if>
</select>

위 예제는 'username'이 'null'이 아닌 경우에만 SQL문이 추가됩니다. 

 

3. <if> 태그의 문자 비교

문자열을 비교할 시에는 따옴표를 아래와 같이 주의해야 합니다.

<!-- 정상 작동 -->
<if test='category.equals("game")'> SQL 쿼리 </if>
<!-- 큰따옴표는 작동 -->

<!-- 정상 작동하지 않음 -->
<if test="category.equals('game')"> SQL 쿼리 </if>
<!-- 작은따옴표는 에러발생 -->

<!-- 'category' 값이 'game'인지 판별 -->
<if test='category == "game"'> SQL 쿼리 </if>

<!-- 'category' 값이 공백인지 판별 -->
<if test='category == ""'> SQL 쿼리 </if>
 
<!-- 'category'가 'null'이 아니면서 'game'과 값이 같은가? -->
<if test='category != null and (category eq "game".toString())'> SQL 쿼리 </if>

 

4. <if> 태그의 숫자 비교

<!-- minRating의 파라미터 값이 5보다 큰가? -->
<if test="minRating > 5"> SQL 쿼리 </if>

<!-- minRating의 파라미터 값이 5보다 큰거나 같은가? -->
<if test="minRating >= 5"> SQL 쿼리 </if>

<!-- minRating의 파라미터 값이 5보다 작은가? -->
<if test="minRating < 5"> SQL 쿼리 </if>

<!-- minRating의 파라미터 값이 5보다 작거나 같은가? -->
<if test="minRating <= 5"> SQL 쿼리 </if>

 

5. <if> 태그 사용 시 주의 사항

OR와 AND 사용 시 주의점

<!-- OR문 사용 시 ||를 사용하면 에러를 발생 -->
<if test='category1 == "game" || category2 == "paly"'> SQL 쿼리 </if>

<!-- || 사용 시 amp;를 붙여 사용 또는 OR로 사용 -->
<if test='category1 == "game" |amp;|amp; category2 == "paly"'> SQL 쿼리 </if>
<if test='category1 == "game" OR category2 == "paly"'> SQL 쿼리 </if>


<!-- AND문 사용 시 &&를 사용하면 에러를 발생 -->
<if test='category1 == "game" && category2 == "paly"'> SQL 쿼리 </if>

<!-- && 사용 시 amp;를 붙여 사용 또는 AND로 사용. -->
<if test='category1 == "game" &amp;&amp; category2 == "paly"'> SQL 쿼리 </if>
<if test='category1 == "game" AND category2 == "paly"'> SQL 쿼리 </if>

 

괄호(<, >) 사용 시 주의점

'null'과 관련된 'test' 속성의 값에 '<'가 포함되면

if 태그의 '>'를 인식 못해서 발생하는 에러입니다.

이 경우 CDATA를 사용해도 에러수정이 안됩니다.

이럴 경우는 아래와 같은 대체식을 사용하면 됩니다.

기호 대체식 예제
< lt <if test="category  &lt;  5"> SQL 쿼리 </if>
<= lte <if test= "category  &lte;  5" > SQL 쿼리 </if>
> gt <if test= "category  &gt;  5"> SQL 쿼리 </if>
>= gte <if test= "category  &gte;  5" > SQL 쿼리 </if>

 

 

<if> 태그를 적절히 활용하면 매우 유연하고 동적인 SQL을 작성할 수 있습니다. 

사용자로부터 받은 검색 조건에 따라 필요한 조건을 동적으로 

추가하여 데이터베이스 쿼리를 효율적으로 수행할 수 있습니다.

반응형