본문 바로가기

MyBatis

MyBatis3 동적 쿼리(if, choose)

반응형

복잡한 형태의 쿼리를 만들다 보면 로직에따라 if문을 추가해야 한다던지
if else 문을 추가해야할 경우가 있다.

myBatis는 이를위해 동적 쿼리를 위한 기능을 제공한다.
그중에서도 가장 많이 사용되는 if 문과 choose문을 살펴보자.

동적쿼리는 XML 매퍼에 지정하게 되는데, JSTL을 사용해봤던 사람들이라면 큰 어려움이 없는 문법이다.


1. IF문
단일 IF 문 이라고 보면 된다. 다음은 age라는 속성의 값이 null이나 빈값이 아닐때 검색조건에 추가하는 구문이다.



    <select id="getContentsP" parameterType="hashmap" resultType="com.test.vo.TestVo">
   
        SELECT
            id, name
        FROM
            TB_test a
        WHERE

            type = 'A'
           
            <if test="age != null AND age != ''">
                AND age = #{age}
            </if>
           
    </select>





2. Choose문
우리가 흔히 개발할때 사용하는 if else와 같다고 보면 된다


 

    <select id="getContentsP" parameterType="hashmap" resultType="com.test.vo.TestVo">
    
        SELECT
            id, name
        FROM
            TB_test a
        WHERE

            type = 'A'
            
            <choose>
                
                <when test="age > 20 ">
                    AND age > #{age}
                </when>
                
                <when test="age < 20 ">
                    AND age < #{age}
                </when>
                
                <otherwise>
                    AND age is not null
                </otherwise>
                
            </choose>
            
            
            
    </select>