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
'#'과 같은 경우는 사용자의 입력을 받는 경우 또는 데이터가 많은 경우 사용합니다.
'데이터베이스 > MyBatis' 카테고리의 다른 글
[Mybatis] <resultMap> 사용 (0) | 2021.05.30 |
---|---|
[Mybaits] <selectKey> 속성 (0) | 2021.05.30 |
[Mybatis] 마이바티스 insert 후 결과값 반환 <SelectKey> 태그 (1) | 2021.05.17 |
[Mybatis] 마이바티스 CDATA 사용하기 (0) | 2021.03.09 |
[Mybatis] 마이바티스 parameterType와 resultType차이 (0) | 2021.03.09 |