728x90
1. <if> 태그 – 조건 분기 처리
예시: 검색 조건 있을 때만 추가
<select id="searchUsers" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
- test는 자바 조건식 (!= null, > 0, == 'admin' 등)
- <where>와 함께 쓰면 자동으로 WHERE 키워드 붙여주고, AND/OR 정리까지 해줘요
2. <choose>, <when>, <otherwise> – 다중 조건 분기
예시: 조건 우선순위 처리
<select id="searchByPriority" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="name != null">
name = #{name}
</when>
<when test="email != null">
email = #{email}
</when>
<otherwise>
status = 'active'
</otherwise>
</choose>
</where>
</select>
- if-else if-else 구조처럼 작동
- 첫 번째 조건만 실행됩니다 (순서 중요!)
3. <trim> – 접두어/접미어 다듬기
- 복잡한 SQL에서 WHERE, SET 등의 앞뒤 공백이나 불필요한 쉼표/AND 등을 제거할 수 있어요.
예시: UPDATE 구문에서 쉼표 제거
<update id="updateUser" parameterType="User">
UPDATE users
<trim prefix="SET" suffixOverrides=",">
<if test="name != null"> name = #{name}, </if>
<if test="email != null"> email = #{email}, </if>
</trim>
WHERE id = #{id}
</update>
- prefix="SET": 앞에 SET 자동 붙임
- suffixOverrides=",": 마지막 쉼표 제거
4. <where> – 자동 WHERE 처리
- <where>는 조건이 하나라도 있으면 자동으로 WHERE을 추가
- 첫 번째 조건 앞에 AND, OR이 있으면 자동 제거해줘요
예시
<where>
<if test="name != null"> AND name = #{name} </if>
<if test="email != null"> AND email = #{email} </if>
</where>
결과:
WHERE name = ? AND email = ?
마무리 요약
태그 | 역할 | 주요 속성 |
<if> | 조건에 따라 SQL 삽입 | test 필수 |
<choose> | 조건 중 하나만 선택 | <when>, <otherwise> 조합 |
<where> | 조건이 있을 경우 WHERE 자동 추가 | AND, OR 정리 |
<trim> | 접두어/접미어 자동 정리 | prefix, suffixOverrides 등 |
응용
- 검색 조건 필터: <where> + <if>
- 동적 업데이트: <trim prefix="SET"> + <if>
- 우선순위 조건 처리: <choose>
LIST
'Mybatis > 동적 SQL 작성' 카테고리의 다른 글
동적 정렬/페이징 구현 (0) | 2025.04.17 |
---|---|
동적 조건 검색 처리 (0) | 2025.04.17 |