반응형
#(PreparedStatement 생성)
* 쿼리 주입을 예방할 수 있어 보안 측면에서 용이, 사용자의 입력을 받는 경우에도 사용 가능
* 변수를 바인드하여 사용하기 때문에 값이 변경되어도 같은 쿼리로 인식(캐싱)
mapper | 쿼리 전달 | 실제 수행 쿼리 |
SELECT * FROM TEST WHERE ID = #{id} AND NAME = #{name} |
SELECT * FROM TEST WHERE ID = ? AND NAME = ? |
SELECT * FROM TEST WHERE ID = 11 AND NAME = 'halfStorage' |
$(Statement 생성)
* 파라미터가 바로 출력
* 입력된 값이 문자열이라도 쿼리문에서 ' '로 감싸지 않음
* 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용
* 쿼리 주입이 가능하여 사용자의 입력을 받는 경우에는 SQL Injection 발생
* 값이 변경될 경우 다른 쿼리로 인식하여 파싱 등의 작업으로 속도 저하 우려
* 해당 컬럼의 자료형에 맞춰 파라미터의 자료형이 변경
mapper | 쿼리 전달 | 실제 수행 쿼리 |
SELECT * FROM TEST WHERE ID = ${id} AND NAME = ${name} |
SELECT * FROM TEST WHERE ID = 11 AND NAME = halfStorage |
SELECT * FROM TEST WHERE ID = 11 AND NAME = halfStorage |
* iBatis에서는 #id#, $id$로 사용됩니다.
반응형
'- DB' 카테고리의 다른 글
[Oracle, MySQL, MSSQL] PROCEDURE (0) | 2020.07.14 |
---|---|
[MySQL] int(11), ZEROFILL (0) | 2020.07.14 |
[MySQL] Incorrect string value (0) | 2020.06.15 |
[Oracle, MySQL] 시간 계산 (0) | 2020.04.10 |
[Oracle] ORA-12518: TNS:listener could not hand off client connection (0) | 2020.04.07 |