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
'#'과 같은 경우는 사용자의 입력을 받는 경우 또는 데이터가 많은 경우 사용합니다.
'Programming > DataBase' 카테고리의 다른 글
[DataBase]데이터 모델링에 대해 알아보자 (0) | 2019.02.19 |
---|---|
<MongoDB> 몽고DB란 무엇일까?? (0) | 2018.10.12 |
<SQL>SQL 인젝션 방어하는 방법중 하나 (0) | 2018.10.11 |
[JDBC]로그인페이지를 을 만들어 봅시다. (1) | 2018.05.01 |
(SQL)숫자 함수에(단일행 함수) 대하여 알아봅시다! (2) | 2018.04.24 |