[MyBatis] 동적 쿼리Backend/MyBatis2022. 9. 28. 21:19
Table of Contents
반응형
검색 조건에 따라 비교하면서 동적 쿼리를 사용하는 방법에 대해 알아보겠습니다.
MyBatis와 데이터베이스는 Oracle을 사용하였습니다.
조건문
조건문에는 단일(if), 다중(choose, when, otherwise) 조건문이 있습니다.
단일 조건문
<select id="findByDynamic" resultType="Sample" parameterType="SearchParam">
SELECT *
FROM TB_SAMPLE
WHERE
column1 = #{parameter1}
<if test="parameter2 != null and parameter2 != ''">
AND column2 LIKE %'||#{parameter2}||'%'
</if>
</select>
다중 조건문
<select id="findByDynamic" resultType="Sample" parameterType="SearchParam">
SELECT *
FROM TB_SAMPLE
WHERE
column1 = #{parameter1}
<choose>
<when test="parameter2 != null and parameter2 == ''">
AND column2 = #{parameter2}
</when>
<otherwise>
AND column3 = #{parameter3}
</otherwise>
</choose>
</select>
비교 형식
<!-- 문자열 비교 -->
<if test="parameter != null and (parameter eq 'all'.toString())"></if>
<if test="!parameter.equals('all')"></if>
<!-- 공백 비교 -->
<if test="parameter == ' '"></if>
<!-- 값 비교 -->
<if test="uesYn == 'Y'"></if>
for 문
foreach
를 사용하여 조건을 만들 수 있습니다.
<select id="findByDynamic" resultType="Sample" parameterType="SearchParam">
SELECT *
FROM TB_SAMPLE
WHERE
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
column1 IN ${item}
</foreach>
</select>
where 절
<select id="findByDynamic" resultType="Sample" parameterType="SearchParam">
SELECT *
FROM TB_SAMPLE
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="parameter1 != null and parameter1 != ''">
AND column1 = #{parameter1}
</if>
<if test="parameter2 != null and parameter2 != ''">
AND column2 = #{parameter2}
</if>
</trim>
</select>
반응형
'Backend > MyBatis' 카테고리의 다른 글
[MyBatis] 페이징 처리 (0) | 2022.09.28 |
---|
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!