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>
'SpringBoot > 이론' 카테고리의 다른 글
[ SpringBoot ] MyBatis 프레임워크 (1) | 2023.09.25 |
---|---|
[ Spring Boot ] 서비스 레이어와 인터페이스의 장점 (0) | 2023.09.21 |
[ Spring Boot ] JDBC 연결 (0) | 2023.09.19 |
[ Spring Boot ] 데이터 유효성 검사 (1) | 2023.09.15 |
[ Spring Boot ] C - V 간의 다양한 방법으로 데이터 주고 받기 (0) | 2023.09.14 |