<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 절에 추가한다.