IT 소스/MyBatis

[MyBatis] <set> - SET절에 동적으로 필드를 추가하거나 생략

한량이야기 2024. 2. 7. 11:28
반응형

안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.

set tag

 

<set> 태그는 UPDATE 쿼리를 생성할 때 사용됩니다. 

이 태그는 SET 절을 동적으로 생성하여 데이터베이스 

테이블의 열 값을 업데이트하는 데 사용됩니다.

 

1. <set> 태그의 구문 및 사용법

<!-- <set> 태그의 기본 구조 -->
<update id="updateUser" parameterType="User">
    UPDATE users
    <set>
        <!-- 업데이트할 열과 값을 정의 -->
    </set>
    WHERE id = #{id}
</update>

<set> 태그 내부에는 업데이트할 열과 값을 지정하는 부분이 들어갑니다.

 

2. <set> 태그의 예제

<!-- 사용자 정보 업데이트 쿼리 -->
<update id="updateUser" parameterType="User">
    UPDATE users
    <set>
        <if test="username != null">
            username = #{username},
        </if>
        <if test="password != null">
            password = #{password},
        </if>
        <if test="email != null">
            email = #{email},
        </if>
    </set>
    WHERE id = #{id}
</update>

여기서 <set> 태그는 동적으로 'SET' 키워드를 붙이면서

각 열의 값이 null이 아닌 경우에만 해당 열을 업데이트하고

필요 없는 '콤마'를 자동으로 제거합니다.

 

만약 모든 조건이 'null'이 아니면 아래와 같은 SQL을 생성할 것입니다.

UPDATE users
    SET
        username = 'codemen',
        password = '1q2w3e4r',
        email = 'codemen@codemen.com'
WHERE id = '1'

 

<set> 태그를 <trim> 태그로 처리한다면 아래와 같을 것입니다.

<!-- 사용자 정보 업데이트 쿼리 -->
<update id="updateUser" parameterType="User">
    UPDATE users
    <trim prefix="SET" suffixOverrides=",">
        <if test="username != null">
            username = #{username},
        </if>
        <if test="password != null">
            password = #{password},
        </if>
        <if test="email != null">
            email = #{email},
        </if>
    </trim>
    WHERE id = #{id}
</update>

이 경우 접두사 'SET'는 추가하고

접미사 '콤마(,)'는 삭제합니다.

 

<trim>의 자세한 내용은 이전글을 참고해 주세요.

반응형