#티베로에서 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라는 변수에 저장하고 이를 쿼리에서 활용할 수 있다. |
-동적 태그를 잘 활용하면 보다 다이나믹한 쿼리를 생성할 수 있습니다.
'IT > Tibero' 카테고리의 다른 글
[Tibero] - 티베로 AGGR_CONCAT 함수 사용법 (0) | 2021.02.01 |
---|
댓글