본문 바로가기

Programming/DataBase

<Mybatis> #과 $의 차이를 알아보자!

728x90
반응형


mybatis를 사용하다 mapper에 sql문을 작성할 때

 '#''$'들을 볼 수 있습니다.

그것이 어떤 의미인지 알아봅시다!


▷'#'이란?

PreparedStatement를 의미합니다.     


ex) (ID = admin)

 ▶ mybatis mapper

    SELECT ID FROM test WHERE ID = #{ID}

     Oracle로 넘어온 쿼리

    SELECT ID FROM test WHERE ID = ?

     실제 수행 쿼리

    SELECT ID FROM test WHERE ID = 'admin'



▷'$'란?

Statement를 의미합니다.     


ex) (num = 77)

 ▶ mybatis mapper

    SELECT ID FROM test WHERE num= ${num}

     Oracle로 넘어온 쿼리

    SELECT ID FROM test WHERE num = 77

     실제 수행 쿼리

    SELECT ID FROM test WHERE num = 77



 ▷ '#'과 '$'의 차이

 '#'을 사용하게 된다면 오라클에서 변수를 바인드를 하여 ID값이 달라져도 같은 쿼리로 인식하게 됩니다.

반면 $를 사용한다면 num값이 달라질 경우 다른 쿼리로 인식하기 때문에 새로 파싱 등의 작업으로 속도가 저하될 수가 있습니다.


  '$'와 같은 경우 자주 바뀌지 않거나 사용자의 입력을 받는 경우가 아닐 때 사용하면 좋습니다.

  예를들어 컬럼명에 사용합니다. 만약 사용자의 입력을 받는 경우

 SQL Injection 보안 위험이 발생합니다.

SQL Injection 방어하는 방법 : http://rh-cp.tistory.com/70


  '#'과 같은 경우는 사용자의 입력을 받는 경우 또는 데이터가 많은 경우 사용합니다.


반응형