반응형

MyBatis trim기능을 활용하여 sql 오류를 줄여봅시다.

SELECT COLUMN1
     , COLUMN2
     , COLUMN3
  FROM TABLE
 WHERE PK_COLUMN1 = #{key1}
   AND (
        
        PK_COLUMN2 = #{orKey1}
        
        
        OR PK_COLUMN3 = #{orKey2}
        
   )

이라는 코드가 존재할때

orKeys1, orKeys2의 값이 없다면 오류가 발생할겁니다.

SELECT COLUMN1
     , COLUMN2
     , COLUMN3
  FROM TABLE
 WHERE PK_COLUMN1 = #{key1}
   AND (
   )

이를 방지하고자 MyBatis에서는 trim을 사용하여 동적으로 SQL을 구현할 수 있도록 하였습니다.

SELECT COLUMN1
     , COLUMN2
     , COLUMN3
  FROM TABLE
 WHERE PK_COLUMN1 = #{key1}
   
        
        OR PK_COLUMN2 = #{orKey1}
        
        
        OR PK_COLUMN3 = #{orKey2}
        

<trim prefix="AND (" prefixOverrides="OR" suffix=")">

<trim></trim> 안에 쿼리가 존재한다면 AND(  와  ) 가 자동으로 만들어지게됩니다.

 

prefixOverrides="OR"은 맨앞에 OR연산자가 존재한다면 OR 연산자를 지워버리게 됩니다.

 

orKeys2의 값만 들어왔을경우

OR PK_COLUMN3 = #{orKeys2} 가 되는게 아니라 맨 앞 OR 연산자를 없애버리므로

PK_COLUMN3 = #{orKeys2}가 됩니다.

 

반대로 끝의 문자열을 지우고 싶다면

suffixOverrides을 사용하면 됩니다.

주로 UPDATE문에 사용되는데요

UPDATE [TABLE]                                |* ==> *|    UPDATE [TABLE]
   SET                                        |* ==> *|       SET
   COLUMN1 = #{data1},  |* ==> *|       COLUMN1 = #{data1},
   COLUMN2 = #{data2},  |* ==> *|       COLUMN2 = #{data2},
   COLUMN3 = #{data3},  |* ==> *|       COLUMN3 = #{data3},
   COLUMN4 = #{data4},  |* ==> *|       COLUMN4 = #{data4},
 WHERE PK_COLUMN = #{pkKey}                   |* ==> *|     WHERE PK_COLUMN = #{pkKey}

<if>를 통해 입력된값만 update를 하고 싶은데 마지막 쉼표(,) 때문에 오류가 나게됩니다.

이처럼 마지막 쉼표(,)를 제거하기 위해서 suffixOverrides를 사용하게됩니다.

UPDATE [TABLE]                                |* ==> *|    UPDATE [TABLE]
       |* ==> *|       SET
   COLUMN1 = #{data1},  |* ==> *|       COLUMN1 = #{data1},
   COLUMN2 = #{data2},  |* ==> *|       COLUMN2 = #{data2},
   COLUMN3 = #{data3},  |* ==> *|       COLUMN3 = #{data3},
   COLUMN4 = #{data4},  |* ==> *|       COLUMN4 = #{data4}       /* 쉼표(,)가 없어집니다. */
 WHERE PK_COLUMN = #{pkKey}                   |* ==> *|     WHERE PK_COLUMN = #{pkKey}

 

 

제 글이 코딩하는데 도움이 되면 좋겠습니다 :)

저도 잘 모르지만 제가 아는 만큼 써보려고 합니다 ㅎㅎ

이상 MyBatis trim 사용법이였습니다.

반응형

'IT > spring' 카테고리의 다른 글

이클립스 작업표시줄에 고정시키는 방법  (0) 2019.08.16

+ Recent posts