1. 파라미터 문법
MyBatis에서 mapper 쿼리문이 있는 XML 파일에 파라미터 값을 설정할 때 크러스햇지(#{}
)와 달러 사인(${}
) 기호를 사용한다. 이 둘은 용도가 다르기 때문에 명확히 구분해서 사용해야 한다.
2. 차이점
1) 크러스햇지(#{})
크러스햇지(#{}
)는 값에 작은따옴표('
)가 붙으며, PreparedStatement가 String 형태로 들어와 자동으로 parameter 형식이 된다. SQL injection을 예방할 수 있기 때문에 보안에 유리하다.
1
| SELECT name FROM user_tb WHERE user_id = #{id}
|
1
| SELECT name FROM user_tb WHERE user_id = ?
|
1
| SELECT name FROM user_tb WHERE user_id = 'admin'
|
2) 달러 사인(${})
달러 사인(${}
)은 값에 작은따옴표('
)가 붙지 않으며, Statement의 Parameter 값을 그대로 전달되기 때문에 의도적인 쿼리 주입을 막을 수 없다.
1
| SELECT name FROM user_tb WHERE user_age = ${age}
|
1
| SELECT name FROM user_tb WHERE user_age = 30
|
1
| SELECT name FROM user_tb WHERE user_age = 30
|
[출처 및 참고]