반응형
안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.
<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" && category2 == "paly"'> SQL 쿼리 </if>
<if test='category1 == "game" AND category2 == "paly"'> SQL 쿼리 </if>
괄호(<, >) 사용 시 주의점
'null'과 관련된 'test' 속성의 값에 '<'가 포함되면
if 태그의 '>'를 인식 못해서 발생하는 에러입니다.
이 경우 CDATA를 사용해도 에러수정이 안됩니다.
이럴 경우는 아래와 같은 대체식을 사용하면 됩니다.
기호 | 대체식 | 예제 |
< | lt | <if test="category < 5"> SQL 쿼리 </if> |
<= | lte | <if test= "category <e; 5" > SQL 쿼리 </if> |
> | gt | <if test= "category > 5"> SQL 쿼리 </if> |
>= | gte | <if test= "category >e; 5" > SQL 쿼리 </if> |
<if> 태그를 적절히 활용하면 매우 유연하고 동적인 SQL을 작성할 수 있습니다.
사용자로부터 받은 검색 조건에 따라 필요한 조건을 동적으로
추가하여 데이터베이스 쿼리를 효율적으로 수행할 수 있습니다.
반응형
'IT 소스 > MyBatis' 카테고리의 다른 글
[MyBatis] <set> - SET절에 동적으로 필드를 추가하거나 생략 (0) | 2024.02.07 |
---|---|
[MyBatis] <trim> - 특정 조건에 따라 부분적으로 SQL 코드를 생략 (0) | 2024.02.05 |
[MyBatis] <where> - 'AND'나 'OR'와 같은 연산자를 자동으로 처리 (0) | 2024.02.04 |
[MyBatis] <choose>, <when>, <otherwise> - 조건구문 (0) | 2024.02.03 |
[MyBatis] 변수 #{} 와 ${} 의 차이점? (0) | 2024.02.01 |