데이터베이스/MyBatis

[Mybaits] 마이바티스 #{}과 ${}의 차이

포포015 2021. 5. 25. 15:45

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

 

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