본문 바로가기
CS/Database

[MyBatis] 동적 SQL 처리 - trim 사용하기

by 별토끼. 2021. 8. 19.
반응형

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>

참고
https://mybatis.org/mybatis-3/ko/dynamic-sql.html

반응형

댓글