- 쿼리 실행 시 #{~~} 는 ? 으로 되어 PreparedStatement 객체에서 ? 에 들어갈 파라미터 값을 넣어주면서 사용이 된다.
- 변수를 바인드 처리하기 때문에 같은 쿼리로 인식하여 재사용 가능
ex)
1
2
3
4
5
6
7
8
|
작성된 것
select * from member where username = #{name}
DB에서 받는 쿼리
select * from member where username = ?
실제 수행
select * from member where username = 'cot'
| cs |
$(정적 Statement)
- 쿼리가 수행될 때 column = 값 형태로 수행되기 때문에 ' ' 로 감싸줘야한다.
- PreparedStatement과 달리 같은 쿼리로 인식하지 않기 때문에 재사용이 불가능하다.
- 단순한 String으로 변환하기 때문에 SQLInjection 위험 있음
(악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드인젝션 공격방법)
- $는 주로 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용하는듯 !
ex)
1
|
select * from member where username = '${name}';
| cs |
---------------------------------------------------------------------------------------
>>>>> 음 좀 더 찾아봐야할 것 같음. 각 장단점이 있는 것 같음. 관련 레퍼런스 찾아보기
참조
댓글 없음:
댓글 쓰기