은은하게 코드 뿌시기

[마이바티스/Mybatis] 문법 종류 - 기본/CDATA/동적쿼리 본문

웹/Mybatis

[마이바티스/Mybatis] 문법 종류 - 기본/CDATA/동적쿼리

은은하게미친자 2023. 7. 3. 11:20
728x90

 

종류 예시
<select></select>  
<insert></insert>  
<update></update>  
<delete></delete>  
CDATA 사용하기
<![CDATA[태그가아니라실제쿼리에 필요한코드]> <![CDATA[<=]]>

<![CDATA[>=]]>
<![CDATA[&]]>
<![CDATA[||]]>

<![CDATA[
  SELECT * FROM TESTTABLE
    WHERE TESTCOL3 >= 40 
]]>
동적쿼리
<if></if>

: 단일조건
<if test='조건'>
   조건이 참일때 추가될문장
</if>
<choose>,<when><otherwise>

: 다중조건
<choose>
  <when test='조건1'>
    조건1에 해당하는 실행문
  </when>
 <when test = '조건2'>
   조건2에 해당하는 실행문
 </when>
 <otherwise>
   조건1,조건2 이외의 경우에
   실행문
 </otherwise>
</choose>
<where>

: 동적 sql
where 내부에 if,choose문등으로 조건을 걸어 사용 할 수 있다.
where 내부코드가 추가되는 경우 동적으로 where 키워드를 붙이고, 가장 앞에 해당되는 AND나 OR를 지워줍니다.
SELECT *
<WHERE>
  <if test='조건1'>
     AND TESTCOL = 'T1'
  </if>
  <if test='val1 != null and val1 !="" '>
    AND  TESTCOL2 = #{val1}
  </if>
</WHERE>
FROM TESTTABLE
<set>
 
: 동적 sql
동적으로 set키워드르 붙이고 필요없는 컴마를 제거합니다.
UPDATE TESTTABLE
<set>
   <if test='val1 == c1'>
     TESTCOL2 = #{val1} ,
   </if>
   <if  test='val2 != null and val2 !=""'>
     TESTCOL3 = #{val2} ,
   </if>
</set>
<trim>

: 동적 sql
접두사, 접미사를 추가하거나오버라이딩하여 커스텀 할 수있게 동적 쿼리를 만들 수있습니다.

prefix : 실행될 쿼리의 가장 앞에 문자를 추가합니다.
prefixOverrides : 실행될 쿼리의 가장 앞에 해당하는 문자가 있는 경우 지워줍니다.
suffix : 실행될 쿼리의 가장 뒤에 문자를 추가합니다.
suffixOverrides : 실행될 쿼리의 가장 뒤에 해당하는 문자가 있는 경우 지워줍니다.
<trim prefix="문자열" prefixOverrides="문자열" suffix="문자열" suffixOverrides="문자열">
  실행될 쿼리
</trim>
<foreach>

: 동적 sql
반복문, List,배열 객체가 파라미터로 넘어올 경우 반복하여 처리 
collection : 컬렉션파라미터, 받아온 반복가능한 객체
item : 현재 반복되는 값을 저장할 변수
index : 현재 반복 되는 인덱스 값을 저장할 변수
open : 쿼리가 실행될 때 앞에 추가될 접두사(시작문자열)
close : 쿼리가 실행될때 끝에 추가될 접미사(종료문자열)
separator : 컬렉션이 반복될 때 추가되 문자 ( 구분자 문자열) 
<select id ="selectTestTable" parameterType="hashMap" resultType ="hashMap" >

SELECT * 
FROM TESTTABLE
WHERE TESTCOL2 IN

<foreach collection="hmparam" itme="items" open="(" seperator="," close=")">
   #{items.val1}
</foreach>

</select>
<selectKey>

: 다중쿼리
마이바티스 쿼리문을 실행하기전 <selectKey> 태그안에 쿼리를 이전 혹은 이후에 수행하여 조회된 결과를 파라미터로 사용 할 수잇습니다.
<selectKey> 의 결과로 나오는 데이터의 row수는 1개 여야 합니다.
resultType : 결과의 타입
keyProperty : selectKey구문의 결과가 세팅될 대상 프로퍼티
keyColumn : 리턴되는 결과셋의 컬럼명은 프로퍼티에 일치, 여러개의 컬럼을 사용하는 경우 콤마를 사용해서 구분,
order : 쿼리 수행순서(BEFORE, AFTER)
before : #{프로퍼티명} 으로 바인드 변수 사용할 수있음.
after : 자바단에서 AFTER로 보낸 값 사용할 수있음, 바인드 변수 불가.
<insert id="insertTEST" parameterType="hashMap">
<selectKey keyProperty="nextVal" resultType="int" order="BEFORE">
   SELECT SEQ_TEST.NEXTVAL FROM DUAL
</selectKey>

INSERT INTO TESTTABLE(
 TESTSEQ, TESTCOL1, TESTCOL2 
) VALUES (
 #{nextVal} , #{val1}, #{val2}
)
</insert>
  

 

728x90
Comments