MyBatis를 진행하다 #{}, ${} 의 차이점에 대해 명확히 짚고 넘겨야 할 것 같아 피드를 작성하게 되었습니다.
- 참고 : 자세하게 나와있습니다!
seq가 int형인 경우?
SELECT *
FROM table
WHERE seq = #{seq}::int // postgreSQL
SELECT *
FROM table
WHERE seq = ${seq}
- 파라미터가 String 형태로 들어와 자동적으로 '파라미터' 형태가 된다.
ex) #{user_id}의 user_id의 값이 abc라면 쿼리문에는 USER_ID = 'abc'의 형태가 된다.- 쿼리 주입을 예방할 수 있어 보안측면에서 유리하다.
- 파라미터가 바로 출력된다.
- 해당 칼럼의 자료형에 맞추어 파라미터의 자료형이 변경된다.
- 쿼리 주입을 예방할 수 없어 보안측면에서 불리하다.
그러므로, 사용자의 입력을 전달할때는 사용하지 않는 편이 낫다.- 테이블이나 칼럼명을 파라미터로 전달하고 싶을 때 사용한다.
#{}은 자동으로 ''가 붙어서 이 경우에는 사용할 수 없다.