쿼리를 쓸 때 조건절을 동적으로 사용하는 경우가 많다.
그럴 때 문제가 되는게 연산자나 콤마의 제거이다.
그럴 때는 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를 보니 그렇게 나와있넴~
댓글 없음:
댓글 쓰기