쿼리를 쓸 때 조건절을 동적으로 사용하는 경우가 많다.
그럴 때 문제가 되는게 연산자나 콤마의 제거이다.
그럴 때는 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를 보니 그렇게 나와있넴~
'개발 > Database' 카테고리의 다른 글
MyBatis/iBatis] 방금 INSERT 된 Key 가져오기 (3) | 2012.09.05 |
---|---|
MyBatis] 반복되는 쿼리 묶기 Sql , include 태그 (0) | 2012.09.05 |
MySql] Insert Select 문 (1) | 2012.08.28 |
[MySql] 같은 컬럼의 행들에 한방에 update 하기 (4) | 2012.08.07 |
[MYSQL] 가져온 값을 조건에 따라 값 바꾸기(case - when - end 문) (1) | 2012.08.02 |