1. <if>
<if> 태그 조건에 따라 SQL 구문의 일부를 포함시키거나 제외시킬 때 사용함.
<if test="조건식">
SQL 구문
</if>
- test 속성: 조건식을 지정함. 이 조건이 true로 평가되면 태그 내부의 SQL 구문이 포함됨.
<select id="selectActiveUsers" resultType="User">
SELECT * FROM users
WHERE 1=1
<if test="status != null">
AND status = #{status}
</if>
<if test="lastLoginDate != null">
AND last_login_date > #{lastLoginDate}
</if>
</select>
사용자 조회 시 status와 lastLoginDate 조건을 동적으로 적용
- status가 null이 아니면 해당 status를 가진 사용자만 선택
- lastLoginDate가 null이 아니면 해당 날짜 이후에 로그인한 사용자만 선택
2. <foreach>
태그 컬렉션을 반복 처리할 때 사용함. IN 절이나 batch insert 등에 유용함.
<foreach item="항목" index="인덱스" collection="컬렉션"
open="시작 문자열" separator="구분자" close="종료 문자열">
#{항목}
</foreach>
- item: 현재 반복 중인 요소를 참조하는 변수명
- index: 현재 반복 중인 인덱스를 참조하는 변수명 (선택적)
- collection: 반복할 컬렉션 지정
- open, separator, close: 각각 반복 시작, 요소 간 구분, 반복 종료 시 사용할 문자열
<select id="selectPostIn" resultType="Post">
SELECT * FROM post
WHERE id IN
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
여러 개의 post id를 입력받아 해당하는 post들을 조회
- list 컬렉션의 각 요소를 순회함
- 각 요소는 괄호로 둘러싸이고 쉼표로 구분됨
- 결과적으로 "WHERE id IN (id1, id2, id3, ...)" 형태의 SQL 생성
3. <trim>
태그 SQL 문의 앞뒤에 특정 문자열을 추가하거나 제거할 때 사용함.
<trim prefix="시작문자열" prefixOverrides="제거할 시작 문자열"
suffix="종료문자열" suffixOverrides="제거할 종료 문자열">
SQL 구문
</trim>
- prefix: 앞에 추가할 문자열
- prefixOverrides: 앞에서 제거할 문자열
- suffix: 뒤에 추가할 문자열
- suffixOverrides: 뒤에서 제거할 문자열
<select id="selectEmployeesByLevel" resultType="Employee">
SELECT * FROM employees
WHERE 1=1
<choose>
<when test="selType eq 'SUPERIOR'">
AND employee_level > #{level}
</when>
<when test="selType eq 'SUBORDINATE'">
AND employee_level < #{level}
</when>
<otherwise>
AND employee_level = #{level}
</otherwise>
</choose>
</select>
Author 테이블의 레코드를 동적으로 업데이트
- SET 키워드를 자동으로 추가
- 각 필드가 null이 아닐 때만 해당 필드를 업데이트
- 마지막 컬럼 뒤의 불필요한 쉼표를 자동으로 제거
'MyBatis' 카테고리의 다른 글
계층 쿼리 (중첩 SELECT_mysql, CTE_mysql, CONNECT BY_oracle) (0) | 2024.09.09 |
---|---|
@변수명 := (0) | 2024.09.09 |
<sql>, <include>, <selectKey> (0) | 2024.09.09 |
<set>, <where> (0) | 2024.09.09 |
<choose>, <when> , <bind> (0) | 2024.09.09 |