[MyBatis] 동적 쿼리  



쿼리를 짜다보면 동적 쿼리를 만들어야 할 때 가 있다. 싫다 


마이바티스에서는 동적 쿼리를 처리하는 방법이 존재한다.



1. if 문


# keyword 가 null 이 아니면  AND KEYWORD LIKE #{keyword} 


<select id="dynamicSql" resultType="EgovMap">

    SELECT * FROM MAP

    WHERE POIX = '100'

    <if test="keyword != null">

        AND KEYWORD LIKE #{keyword}

    </if>

</select>


# if문 안에서 문자열 비교 

# 파라미터.equals('keyword')

# (파라미터 eq 'A'.toString())

# 파라미터 == 'A'


 <if test="keyword != null and keyword.equals('서울') ">

        AND KEYWORD LIKE #{keyword}

 </if>




2. choose, when, otherwise


# if - else 구문 처럼 쓸 수 있다 


<select id="dynamicSql" resultType="EgovMap">

  SELECT * FROM MAP

  WHERE POIX = '100'

  <choose>

    <when test="keyword != null and keyword.equals('서울')">

      AND KEYWORD LIKE #{keyword}

    </when>

    <when test="keyword != null and keyword.equals('부산')">

      AND KEYWORD LIKE #{keyword}

    </when>

    <otherwise>

      AND KEYWORD = '경기'

    </otherwise>

  </choose>

</select>



3. foreach


# 마이바티스는 반복문도 가능하다

foreach 를 사용하여 collection 에 대해 반복처리와 IN 조건에 사용한다 


<select id="dynamicSql" resultType="EgovMap">

SELECT * FROM MAP

WHERE KEYWORD IN

<foreach item="item" index="index" collection="list" open="(" separator="," close=")">

        #{item}

</foreach>

</select>


'프로그래밍 > SQL' 카테고리의 다른 글

[MySQL] 모든 공백 제거  (0) 2017.02.06
[MyBatis] 동적 쿼리 LIKE 문 삽질 주의  (0) 2017.01.16
[MyBatis] 동적 쿼리 IF문  (0) 2017.01.11

+ Recent posts