2017년 8월 2일 수요일

Mybatis #, $ 차이

#(동적 PreparedStatement)
- 쿼리 실행 시 #{~~} 는 ? 으로 되어 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

---------------------------------------------------------------------------------------
>>>>> 음 좀 더 찾아봐야할 것 같음. 각 장단점이 있는 것 같음. 관련 레퍼런스 찾아보기 


참조


댓글 없음:

댓글 쓰기