본문 바로가기

MyBatis

Mybatis 동적쿼리



# Mybatis 동적태그

<if> ( 기존 ibatis의 isEqual, isNull, isEmpty, isNotEmpty 등을 하나로 )
WHERE 1=1
<if test="empId != null">
    AND_ID = #{empId}
</if>

<choose>, <when> <otherwise> ( 오라클의 case문과비슷 )
WHERE 1=1
<choose>
    <when test="searchCondition == 'title' ">
        AND TITLE LIKE #{title}
    </when>
    <when test="searchCondition == 'content' ">
        AND TITLE LIKE #{content}
    </when>
    <otherwise>
        AND DEL_YN = 'N'
    </otherwise>

<where>, <trim>    ( 조건에따라 where절 추가할때 )
SELECT COUNT(*)    FROM USER
<trim prefix="WHERE"  prefixOverrides="AND | OR">
    <if test="id != null">
            AND USER_ID = #{id}
    </if>
    <if test="pw != null">
            AND USER_PW = #{pw}
    </if>
</trim>
trim태그를 위와같이 사용시 맨처음 and나 or을 where로 바꿈!!

<set>    ( 동적으로 update구문 만들때 )
UPDATE MST_USER
   <set>
       <if test="email != null">EMAIL = #{email},</if>
       <if test="address != null">ADDRESS = #{address},</if>
       <if test="phone != null">PHONE = #{phone},</if>
    </set>
WHERE USER_ID = #{id}
동적으로 set 키워드를 붙히고 불필요한 콤마를 제거한다.
<trim prefix="SET" suffixOverrides=",">

<trim>
와 같다.


<foreach>    배열타입의 파라미터를 받을때
   AND EMP_ID IN 
<foreach item="empIdArray" index="index" collection="list" open="(" separator="," close=")">#{item}
</foreach>
배열의 값을 빼내어 콤마로 구분하여 괄호안에넣음
=>   ('11', '22', '33' )

<bind>      변수를 만드는 태그
<bind name="searchKeyword"  value="  '%'+title+'%'  "  />

SELECT * 
FROM BOARD
WHERE TITLE LIKE #{searchKeyword}
title파라미터를 받아 searchKeyword라는 변수에 저장하고 이를 쿼리에서 사용