본문 바로가기

SQL

[MyBatis] 동적 태그

728x90
반응형

if - iBatis 의 isEqual, isNotEqaul, isNull, isNotNull, isEmpty, isNotEmpty 를 하나로

WHERE 1=1
<if test="empId != null">
       AND EMP_ID = #{empId}
</if>
 

※ if문 사용 시 주의점

<if test="name.equals('kim')"></if>             // 정상 작동하지 않음
<if test='name.equals("kim")'></if>             // 정상 작동

 

choose, when otherwise - case문 과 같이 케이스에 따라 조건이 달라질 때

WHERE 1=1
<choose>
   <when test = "searchCondition == 'title'">
       AND TITLE LIKE #{title}
   </when>
   <when test = "searchCondition == 'content'">
       AND CONTENT LIKE #{content}
   </when>
   <otherwise>
       AND DEL_YN = 'N'
   </otherwise>

 

where, trim - iBatis의 dynamic과 같이 조건에 따라 where절을 추가할 때 사용

 SELECT COUNT(*)
    FROM MST_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 - 배열 타입의 파라미터를 받을 때 사용

배열이나 리스트의 경우 parameterType="Map" 으로 설정하고,

List일 경우 collection="list"

Array일 경우 collection="array" 로 설정

List나 Array의 경우 Mybatis 내부단에서 Map으로 치환해준다.

배열의 값을 빼내어 콤마로 구분하여 괄호 안에 넣어주게 됨 ex) ('111', '222', 333', '444')

collection : parameter로 받은 배열변수의 명칭

item : collection의 alias

<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="empIdArray != null">
      AND EMP_ID IN <foreach item="empIdArray" index="index" collection="list" open="(" separator="," close=")">#{item}</foreach>
</if>
 

bind - 변수를 만드는 태그

<bind name="searchKeyword" value="'%'+title+'%'"/>
	SELECT *
    FROM BOARD
    WHERE TITLE LIKE #{searchKeyword}
 

title 파라메터를 받아 searchKeyword라는 변수에 저장하고 이를 쿼리에서 활용할 수 있다.

728x90
반응형