반응형
Intro
검색 관련 쿼리를 작성하다가 동적으로 SQL을 처리해야했다. IF문을 3번 써야했는데, Where절 뒤에 들어가는 조건문 속에 AND가 바로 오면 Syntax Error가 발생했다.
trim을 사용해서 해결했는데, 공식문서에 정말 자세히 설명이 나와있고 유사 케이스여서 금방 해결할 수 있었다.
Trim
<trim>
문 안에 있는 쿼리의 맨앞 혹은 맨뒤에 붙는 문자열을 붙이거나 뗄 수 있도록 한다.
prefix
trim 내부 쿼리 가장 앞에 문자열을 붙여준다.
<trim prefix="[문자열]">
...
</trim>
prefixOverrides
trim 내부 쿼리 가장 앞에 해당 문자열을 지워준다.
<trim prefixOverrides="[문자열]">
...
</trim>
suffix
trim 내부 쿼리 가장 뒤에 해당 문자열을 붙여준다.
<trim suffix="[문자열]">
...
</trim>
suffixOverrides
trim 내부 쿼리 가장 뒤에 해당 문자열을 지워준다.
<trim suffixOverrides="[문자열]">
...
</trim>
적용해보기
<select id="selectPost">
SELECT * FROM
<trim prifix="WHERE" prefixOverrides="AND | OR">
<if test="title != null">
AND TITLE = #{title}
</if>
<if test="content != null">
AND CONTENT = #{content}
</if>
<if test="tag != null">
OR TAG = #{tag}
</if>
</trim>
</select>
반응형
'CS > Database' 카테고리의 다른 글
[MyBatis] MyBatis의 Association과 Collection (0) | 2021.08.10 |
---|---|
[MySQL] InnoDB의 Lock 알아보기 (0) | 2021.08.07 |
[MySQL] Transaction rollback 시 Auto Increment 이슈 (0) | 2021.08.05 |
[MySQL] MySQL의 스토리지 엔진 비교 (InnoDB, MyISAM, Archive) (0) | 2021.08.04 |
[SQL] INDEX (인덱스) (0) | 2021.07.27 |
댓글