본문 바로가기
SpringBoot/이론

[ SpringBoot ] MyBatis 동적 쿼리

by Hwanii_ 2023. 9. 25.
728x90

MyBatis 동적 쿼리 문법 정리

- 조건문 (if / choose / when / otherwise)
 
- 조건 특화 엘리먼트 (요소 == 태그) (trim / where / set)
 
- 반복문 (foreach)
 
- 다중 쿼리 (selectKey)

 
 
 

동적 SQL 란 ?

MyBatis의 강력한 기능중 하나는 동적 SQL 를 처리하는 방법 이다.
동적 SQL 이란 상황에 따라 다양한 분기 처리를 통해 SQL문을 동적으로 만드는 것 이다.
 
 
 

조건문 (if / choose / when / otherwise)
 

단일 조건 : <if>
 

<if test="조건">
	조건이 참일 때 추가될 문장
</if>

 
다중 조건 : <choose>, <when>, <otherwise>
 

<choose>

    <when test="조건1">
        조건 1이 참일 때 추가될 문장
    </when>
    
    <when test="조건2">
    	조건 1이 거짓이고, 조건 2가 참일 때 추가될 문장
    </when>
    
    <otherwise>
    	조건 1, 조건 2가 모두 거짓일 때 실행할 문장
    </otherwise>

<choose>

 
 
 

조건 특화 엘리먼트 (trim / where / set)
 

동적 SQL : <where>
 
1) 
<where> 내부에는 조건을 표현할 수 있는 <if> 또는 <choose> 태그가 사용 될 수 있다.
 
2)
<where> 내부 코드가 추가 되는 경우 동적으로 WHERE 키워드를 붙혀 준다.
그러면서 동시에 가장 앞에 해당되는 AND 또는 OR 을 지워 준다.
 

SELECT *
<where>

    <if test="조건">
        AND 칼럼명 = #{변수}
    </if>
    
    <if test="조건">
        AND 칼럼명 = #{변수}
    </if>
     
</where>

 

<select id="" parameterType="" resultType ="">

    SELECT *
    FROM BOARD
    
    <where>
    
    	<if test='title != null and title != ""'>
        	AND TITLE = #{title}
        </if>
        
        <if test='writer != null and writer != ""'>
        	AND WRITER = #{writer}
        </if>
        
        <if test='content != null and content != ""'>
        	AND CONTENT = #{content}
        </if>
        
    </where>
    
</select>

 
동적 SQL : <set>
 
동적으로 SET 키워드를 붙이고 필요 없는 콤마는 제거 한다.
 

UPDATE 테이블명
<set>
	<if test="조건">
    	칼럼명 = #{변수},
    </if>
    
    <if test="조건">
    	칼럼명 = #{변수},
    </if>
</set>

 
동적 SQL : <trim>
 
1)
접두사, 접미사를 추가하거나 오버라이딩 하여 커스텀하게 동적 쿼리를 만들 수 있다.
 
2)
prefix 는 실행될 쿼리의 가장 앞에 문자를 추가 하는 기능을 가지는 속성 이다.
 
3)
prefixOverrides 는 실행될 쿼리의 가장 앞에 해당하는 문자가 있는 경우 지워 주는 기능을 가지는 속성 이다.
 
4)
suffix 는 실행될 커리의 가장 뒤에 문자를 추가 하는 기능을 가지는 속성 이다.
 
5)
suffixOverrides 는 실행될 쿼리의 가장 뒤에 해당하는 문자가 있는 경우 지워 주는 기능을 가지는 속성 이다.
 

<trim prefix="문자열" prefixOverrides="문자열" suffix="문자열" suffixOverrides="문자열">
	실행될 쿼리
</trim>

 
 
 

반복문 (foreach)

 
1)
List, 배열 객체가 파라미터로 넘어올 경우 반복하여 처리 할 수 있다.
 
2)
collection 속성 :
컬렉션 파라미터 (Map, List, Set, 배열, .. 등 반복 가능한 객체) 를 의미 한다.
 
3)
item 속성 :
현재 반복되는 값을 저장할 변수
 
4)
index 속성 :
현재 반복되는 인덱스 값을 저장할 변수
 
5)
open 속성 :
쿼리가 실행 될 때 앞에 추가될 접두사 (시작 문자열)
 
6)
close 속성 :
쿼리가 실행 될 때 끝에 추가될 접미사 (종료 문자열)
 
7.
separator 속성 :
컬렉션이 반복될 때 추가될 문자 (구분자 문자열)
 

<foreach collection="컬렉션 변수" item="항목" index="인덱스" open="시작문자열" close="종료문자열" separator="구분자">
	#{item}
</foreach>
반응형