IT 소스/MyBatis

[MyBatis] <where> - 'AND'나 'OR'와 같은 연산자를 자동으로 처리

한량이야기 2024. 2. 4. 00:31
반응형

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

where tag

 

<where> 태그는 주로 동적 SQL을 작성할 때 사용되며,

WHERE 절을 동적으로 생성할 수 있도록 도와주는 태그입니다.

<where> 태그는 조건이 추가되는 경우

'AND'나 'OR'와 같은 불필요한 연산자를 자동으로 처리하여

유연한 동적 SQL을 작성할 수 있도록 지원합니다. 

 

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

<select id="getUserList" resultType="User">
    SELECT * FROM Users
    <where>
        <!-- 조건이 추가될 경우 동적으로 AND 조건을 생성 -->
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
        <!-- 기타 다양한 조건 추가 가능 -->
    </where>
</select>

1. <where> 태그 내에 포함된 조건은 조건이 추가될 때마다 'AND'로 연결됩니다.
2. <if> 태그를 사용하여 각 조건을 동적으로 추가하고,

필요한 경우 'AND'나 'OR'와 같은 연산자는 자동으로 처리됩니다.

2. <where> 태그의 예제

<select id="getUserList" resultType="User">
    SELECT * FROM Users
    WHERE
        <if test="username != null">
            username = #{username}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
        <if test="status != null">
            AND status = #{status}
        </if>
</select>

 

어떤 조건에도 해당되지 않는다면 아래와 같은 SQL이 만들져 에러를 발생할 것입니다.

SELECT * FROM Users
	WHERE

 

두 번째 조건만 만족한다면 아래와 같은 SQL이 만들져 에러를 발생할 것입니다.

SELECT * FROM Users
    WHERE
    AND email = 'CODEMAN@GMAIL.COM'

 이렇한 에러를 방지하기 위해 <where> 태그를 사용합니다.

 

<where> 태그를 사용하여 코드를 수정하면 아래와 같은 코드로 수정됩니다.

<select id="getUserList" resultType="User">
    SELECT * FROM Users
    <where>
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
        <if test="status != null">
            AND status = #{status}
        </if>
    </where>
</select>

 사용자가 검색 조건으로 'username', 'email', 'status'를 전달할 때,

각각의 조건이 동적으로 추가되고

<where> 태그는 이를 'AND'로 연결하여 유연한 'WHERE'절을 생성합니다.

이렇게 <where> 태그를 사용하면 필요한 조건이 

동적으로 추가되어도 쿼리가 깔끔하게 유지되며, 

불필요한 'AND'나 'OR' 연산자를 신경 쓰지 않아도 됩니다. 

이는 동적 SQL을 작성할 때 가독성과 편의성을 높여줍니다.

 

반응형