새소식

반응형
Java/Spring

MyBatis 동적 SQL(choose, when, otherwise, set)

  • -
반응형

<choose>, <when>, <otherwise>

if문과 같이 MyBatis xml 파일에서 쿼리문을 날릴때 조건문으로 사용할 수 있다.

 

> 사용법

<choose>
    <when test="조건문1"> 쿼리문1 </when>
    <when test="조건문2"> 쿼리문2 </when>
    <when test="조건문3"> 쿼리문3 </when>
    <when test="조건문4"> 쿼리문4 </when>
    <otherwise> 쿼리문5 </otherwise>
</choose>

위처럼 <choose> 태그 안에 <when> 태그를 사용하고 <when> 태그의 test 속성으로 조건문을 넣어 사용한다.

그리고 <when> 태그의 조건문이 True 일 경우 해당 쿼리문을 실행한다.

모든 <when> 태그의 조건문이 False 일 경우 <otherwise> 태그 쿼리문을 실행한다.

 

<choose>, <when>, <otherwise> 태그의 가장 중요한점은 하나라도 True 가 발생하면 해당 쿼리문을 실행한 후

다음 <when> 태그엔 접근하지 않고 종료된다.

 

여기서 MyBatis <if> 태그와 차이점을 예시를 통해 알아보자

 

> 예시(if)

<select id="chooseTest" parameterType="java.lang.Integer">
    SELECT * FROM test WHERE name = 'obo'
    <if test="number != null">
        AND number like '%010%'
    </if>
    <if test="address != null">
        AND address like '%서울%'
    </if>
</select>

 

> 예시(choose, when, otherwise)

<select id="chooseTest" parameterType="java.lang.Integer">
    SELECT * FROM test WHERE name = 'obo'
    <choose>
        <when test="number != null">
            AND number like '%010%'
        </when>
        <when test="address != null">
            AND address like '%서울%'
        </when>
    </choose>
</select>

<if> 태그와 <choose> 태그의 차이점은 True에 따른 실행 횟수이다.

1. <if> 태그는 조건문이 True 인 모든 <if> 문의 쿼리문을 실행한다.

2. <choose> 태그는 <when> 태그의 조건문이 True 일 경우 해당 쿼리문만 실행하고 <choose> 태그는 종료된다.

 

<set>

update 구문을 사용할 때 <set> 태그를 통해 동적 SQL을 작성할 수 있다.

 

> 사용법

<update id="setTest">
    UPDATE "테이블명"
    <set>
        <if test="조건문1"> 쿼리문1 </if>
        <if test="조건문2"> 쿼리문2 </if>
        <if test="조건문3"> 쿼리문3 </if>
    </set>
</update>

위 사용법처럼 update 구문안에 사용한다.

그리고 <set> 태그 안에 <if> 태그의 test 속성을 통해 조건문을 주고 해당 조건문이 True일 경우 Set 절을 만들어

쿼리문을 실행한다.

 

> 예시

<update id="setTest" parameterType="map">
    UPDATE set_test
    <set>
        seq = #{seq}
        <if test="name != null"> , name = #{name} </if>
        <if test="number != null"> , number = #{number} </if>
        <if test="address"> , address = #{address} </if>
    </set>
</update>

 

<set> 태그안의 <if> 태그의 조건문이 해당하는것만 SET 절에 추가한다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.