[MyBatis] 동적 쿼리 <trim> 개념 및 문법 총 정리
<trim>
속성
prefix : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 붙여준다.
UPDATE board <trim prefix="SET"> username=#{username},password=#{password}</trim>
prefixOverrides : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다.
SELECT * FROM board WHERE id = #{id}
<trim prefixOverrides="OR">OR TT LIKE '%' || #{searchContent} || '%' </if>
suffix : 실행 될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 붙여준다.
<trim suffix=")"></trim>
suffixOverrides : 실행될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다.
<trim suffixOverrides=","></trim>
문법
<select id="test" resultType="user">
SELECT * FROM user WHERE id = #{id}
<trim prefix="AND (" prefixOverrides="OR" suffix=")">
<if test="para1 != null">
OR para1 = #{data1}
</if>
<if test="para2 != null">
OR para2 = #{data2}
</if>
</trim>
</select>
설명
0.<trim prefix="AND (" prefixOverrides="OR" suffix=")"> 이 부분을 해석하자면
1. 먼저 prefix 속성이 'AND'로 돼있기 때문에 맨 앞에 'AND'가 붙습니다.
2.prefixOverrides 속성이 쿼리 중에 'OR' 텍스트를 찾고, 찾게 되면 'OR' 텍스트를 제거합니다.
3. 그리고 suffix 속성이 <trim> 문 맨 마지막에 ')'를 닫아줍니다.
실행될 쿼리 (para1, para2 값이 들어올 경우)
SELECT * FROM user WHERE id = '119'
AND para1 = 'java119' OR para2 = 'java119'
실전 예제
prefix, suffixOverrides 사용 예시
1. 맨 앞에 'SET' 붙이고 맨 끝에 있는 콤마(,)를 제거하기
<update id="updateUser">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio},</if>
</trim>
WHERE id=#{id}
</update>
prefix, prefixOverrides 사용
2. 맨 앞에 있는 연산자를(AND 또는 OR) 제거하는 경우
<select id="selectInfo" resultType="user">
SELECT * FROM USER
<trim prefix="WHERE" prefixOverrides="AND |OR">
<if test="username != null">AND username=#{username}</if>
<if test="password != null">OR password=#{password}</if>
<if test="email != null">AND email=#{email}</if>
</trim>
</select>
prefix, prefixOverrides, suffixOverrides 사용
3. 맨 앞에 'SET' 붙이고 맨 앞, 맨 끝에 있는 콤마(,)를 제거하기
<update id="updateTable">
UPDATE TABLE
<trim prefix="SET" prefixOverrides="," suffixOverrides="," >
<if test="aFlag != null">
, A_FLAG = #{aFlag}
</if>
<if test="bFlag != null">
, B_FLAG = #{bFlag}
</if>
<if test="cFlag != null">
, C_FLAG = #{cFlag} ,
</if>
</trim>
WHERE KEY = #{key}
</update>
prefix, prefixOverrides, suffix 사용
4. 맨 앞에 'AND (' 붙이고 맨 앞 'OR' 제거하고 맨 끝에 ')' 붙이기
<select id="searchUser">
<trim prefix="AND (" prefixOverrides="OR" suffix=")">
<if test="searchCategory0 != null">
OR TT LIKE '%' || #{searchContent} || '%'
</if>
<if test="searchCategory1 != null">
OR DS LIKE '%' || #{searchContent} || '%'
</if>
<if test="searchCategory2 != null">
OR WRT_MPR_NM LIKE '%' || #{searchContent} || '%'
</if>
</trim>
</select>
'Spring > MyBatis' 카테고리의 다른 글
[MyBatis] 개발 생산성 향상,중복 쿼리 줄이기 <sql>,<include> 개념 및 문법 총 정리 (0) | 2020.04.29 |
---|---|
[MyBatis] 동적 쿼리 <bind> 문법 총 정리 (0) | 2020.04.26 |
[MyBatis] 동적 쿼리 <where> 문법 총 정리 (3) | 2020.04.05 |
[MyBatis] 동적 쿼리 foreach문 문법 총 정리 (6) | 2020.03.28 |
[MyBatis] CDATA 사용하기(feat.<> 괄호,특수문자 문자열로 인식하기) (0) | 2019.12.10 |