본문 바로가기
IT/Tibero

[Tibero] - 티베로에서 iBatis, myBatis 사용하는 방법

by 차이나는 개발자 2020. 9. 15.
728x90
반응형

#티베로에서 iBatis, myBatis 사용하는 방법

 

 

#iBatis 에서 사용되는 기본 동적 태그(Binary Conditional Tag)

 

사용되는 속성 :

 

resultMap - Object를 return 받을 때 사용합니다.

 

resultClass - Integer 등 1개의 value형을 return 받을 때 사용합니다.

 

parameterClass - Object를 ibatis DML(#num#, #title#)문에 적용 시키고 싶을 때 사용합니다.

 

prepend - 태그 조건에 맞아 실행될 sql문에 선행하여 붙을 속성입니다.

 

property - 매개변수 명입니다.

 

compareProperty - 비교할 다른 매개변수명입니다.

 

compareValue - 비교대상이 될 값이 있습니다.

 

 

<iBatis 동적 태그>

태그 설명과 예시
<isEqual>   property의 값이 같을때만 태그내 쿼리를 실행합니다.
WHERE 1=1
 <isEqual prepend="AND" property="useYn" compareValue="Y">
        EQUIP_TYPE = 1
</isEqual>


useYn 이 Y 일때만 EQUIP_TYPE =1 조건을 실행합니다.
 <isNotEqual>   property의 값이 같지 않을 때만 태그내 쿼리를 실행합니다.
WHERE 1=1
<isNotEqul prepend="AND" property="useYn" compareValue="N">
            EQUIP_TYPE = 1
</isNotEqual>


useYn 이 N이 아닐 때만 EQUIP_TYPE=1 조건을 실행합니다.

 <isGreaterThan> property의 값이 비교값보다 클경우 쿼리를 실행합니다.
WHERE 1=1
<isGreaterThan prepend="AND" property="age" compareValue="19">
             JOIN_YN = 'Y'
</isGreaterThan>


age 값이 19 보다 클경우 JOIN_YN='Y' 조건을 실행합니다.
 <isGreaterEqual> property의 값이 비교값보다 같거나 클경우 쿼리를 실행합니다.
WHERE 1=1
<isGreaterEqual prepend="AND" property="age" compareValue="18">
              JOIN_YN = 'Y'
</isGreaterEqual>


age 값이 18 이거나 이보다 클경우 JOIN_YN='Y' 조건을 실행합니다.
 <isLessEqual> property의 값이 비교값보다 작거나 같을 경우 쿼리를 실행합니다.
WHERE 1=1
<isLessEqual prepend="AND" property="age" compareValue="18">
            JOIN_YN = 'N'
</isLessEqual>

 

 

#단일 조건 태그 입니다.

 태그 설명 
 <isPropertyAvailable>  property값이 유효할 경우 쿼리를 실행합니다.
 <isNotPropertyAvailable>  property값이 유효하지 않을 경우 쿼리를 실행합니다.
 <isNull>  property값이 null일 경우 쿼리를 실행합니다.
<isNotNull>  property값이 null이 아닐 경우 쿼리를 실행합니다.
 <isEmpty>  property값이 비어있을경우 쿼리를 실행합니다.
 <isNotEmpty>  property값이 비어있지 않을 경우 쿼리를 실행합니다.

 

 

#파라메터 조건 태그 입니다.

 태그 설명과 예시
 <isParameterPresent>  파라메터가 있을 경우 쿼리를 실행합니다.
<isParameterPresent prepend="WHERE"> 
          1=1
</isParameterPresent>


파라메터값이 넘어왔을 경우에만 WHERE 조건이 붙습니다.
 <isNotParameterPresent>  파라메터값이 없을 경우 쿼리를 실행합니다.
WHERE 1=1
<isNotParameterPresent prepend="AND">
         TYPE = 'DEFAULT'
<isNotParameterPresent>


파라메터값이 없을 경우에만 TYPE = 'DEFAULT' 쿼리가 실행됩니다.

 

 

#Iterate 태그 입니다.

-파라메터로 배열을 넘겨 IN 쿼리문을 사용할 때 유용합니다.

 태그 설명과 예시
<iterate> 배열 타입의 파라메터를 받을 때 활용합니다.
WHERE 1=1
<isNotEmpty prepend="AND" property="empIdArray">
       EMP_ID IN <iterate open="(" close=")" conjunction="," property="empIdArray">#empIdArray[]#</iterate>
</isNotEmpty>


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

 

 

#dynamic 태그 입니다.

 태그 설명과 에시
 <dynamic>  하위 태그에 일치되는 내용이 존재할 경우 where절을 붙인다.
가장 처음 일치요소의 prepend="AND" 는 생략된다.
<dynamic prepend="WHERE">
        <isEqual prepend="AND" property="empId" comapareValue="123">
                    VACATION = 'TRUE'
        </isEqual>
</dynamic>


empId 파라메터 값 123이라면 <isEqual>태그의 prepend는 생략되고
WHERE 절이 붙어 WHERE VACATION = 'TRUE' 쿼리가 실행된다.

 

 

<myBatis 동적 태그>

#if문

- iBatis 의 isEqual, isNotEqaul, isNull, isNotNull, isEmpty, isNotEmpty 를 하나로 사용할 수 있습니다.

 태그 설명과 예시
 <if> 일반 개발 언어의 if문으로 보시면 됩니다.
WHERE 1=1
<if test="empId != null">
       AND EMP_ID = #{empId}
</if>


if test 후에 문자열에 조건을 넣으시면 됩니다.

※ if문 사용 시 주의점.(따옴표 주의) 문자열 비교시 주의점.

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

<if test='name.equals("kim")'></if>             // 정상 작동합니다.

 

 

#choose, when otherwise - oracle case문과 같이 케이스에 따라 조건이 달라질 때 사용합니다.

 태그 설명과 예시
 <choose>, <when>, <otherwise>  Oracle의 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>


파라메터
searchCondition이 title 이면 AND TITLE LIKE #{title} 을
searchCondition이 content이면 AND CONTENT LIKE #{content} 를
아니면 AND DEL_YN = 'N' 을 조회합니다.

 

 

#where, trim 태그

 태그 설명과 예시
 <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 태그

 태그 설명과 예시 
 <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>
와 같습니다. 

 

 

#iBatis의 iterate와 비슷한 태그도 존재합니다. (foreach)

태그  설명과 예시 
 <foreach>  배열 타입의 파라미터를 받을 때 사용합니다.
배열이나 리스트의 경우 parameterType="Map" 으로 설정하고
List일 경우 collection="list"
배열일 경우 collection="array" 로 설정.
List나 Array의 경우 Mybatis 내부단에서 Map으로 치환합니다.
<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>


배열의 값을 빼내어 콤마로 구분하여 괄호 '(' , ')' 내에 넣게 됩니다.
ex) ('111', '222', 333', '444') 
collection : 파라메터로 받은 배열변수의 명칭입니다.
item : collection의 alias

 

 

#bind

-변수를 만드는 태그입니다.

태그  설명과 예시 
 <bind> 변수를 생성한다.
<bind name="searchKeyword" value="'%'+title+'%'"/>
SELECT *
  FROM BOARD
 WHERE TITLE LIKE #{searchKeyword}


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

 

-동적 태그를 잘 활용하면 보다 다이나믹한 쿼리를 생성할 수 있습니다.




728x90
반응형

'IT > Tibero' 카테고리의 다른 글

[Tibero] - 티베로 AGGR_CONCAT 함수 사용법  (0) 2021.02.01

댓글