본문 바로가기
웹개발/기타

mybatis 동적 쿼리 만들기 - trim 문법

by heavenLake 2024. 8. 2.
반응형

속성


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>

 

 

출처 : 

[MyBatis] 동적 쿼리 <trim> 개념 및 문법 총 정리 (tistory.com)

반응형

댓글