개발/Database

MyBatis] 쿼리에서 특정 문자 제거 (if 사용시)

신매력 2012. 8. 28. 13:51

쿼리를 쓸 때 조건절을 동적으로 사용하는 경우가 많다.


그럴 때 문제가 되는게 연산자나 콤마의 제거이다.


그럴 때는 Mybatis의 trim 을 쓰면 된다.

두가지의 예를 들어보겠다.



1. 맨 끝에 있는 콤마(,)를 제거하는 경우


<update id="updateAuthorIfNecessary" parameterType="domain.blog.Author">
UPDATE AUTHOR
<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>


맨앞에 SET을 붙이고 if안에 무엇이 들어가도 맨 끝에 있는 콤마를 지우겠다는 것이다.



2. 맨 앞에 있는 연산자를(AND 또는 OR) 제거하는 경우


<select id="selectInfo" parameterType="domain.blog.Author" resultType="authorResultMap">
 SELECT * FROM AUTHOR
 <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>


요번에는 앞에 들어가는 AND 또는 OR을 제거하겠다는 것이다.

AND | OR 이건 안써봤지만 MyBatis3 User Guide를 보니 그렇게 나와있넴~