Database/MyBatis

[MyBatis] 동적 쿼리 <trim> 사용 방법

헹창 2023. 9. 12.
반응형

trim 속성

속성 설명
prefix 실행될 <trim> 구문 쿼리 가장 앞에 붙여준다
prefixOverrides 실행될 <trim> 구문 쿼리 가장 앞에, 해당하는 문자들이 있는 경우 자동으로 지워준다
suffix 실행될 구문 쿼리 가장 뒤에 붙여준다
suffixOverrides 실행될 <trim> 구문 쿼리 가장 뒤에, 해당하는 문자들이 있는 경우 자동으로 지워준다

 

trim 문법

<select id="selectUsers" resultType="user">
	SELECT * FROM user 
	 WHERE id = #{id}  
	<trim prefix="AND (" prefixOverrides="OR" suffix=")">
        <if test="userName != null">
        	OR user_name = #{userName}
        </if>
        <if test="userEmail != null">
        	OR user_email = #{userEmail}
        </if>
	</trim>
</select>

설명 

  • prefix  : 구문 맨 앞에 AND ( 가 붙음
  • prefixOverrides  : trim 구문 안의 맨 처음 OR 로 시작할 경우 제거
  • suffix : 구문 맨 뒤에 ) 가 붙음

실행 쿼리

1. userName 만 넘어온 경우

SELECT * FROM user 
 WHERE id = '2090'
   AND (
	user_name = 'haenny' 
   )

2. userEmail 만 넘어온 경우

SELECT * FROM user 
 WHERE id = '2090'
   AND (
	user_email = 'haenny@tistory.com'
   )

3. 둘 다 넘어온 경우

SELECT * FROM user 
 WHERE id = '2090'
   AND (
	user_name = 'haenny' 
	OR user_email = 'haenny@tistory.com'
   )

 

 

응용 예제 쿼리

prefix, suffixOverrides 사용 

  • 맨 앞에 '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 사용

  • 맨 앞에 있는 연산자를(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 사용

  • 맨 앞에 '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 사용

  • 맨 앞에 '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>
728x90
반응형

댓글

추천 글