#{ } 데이터가 자동으로 따옴표(' ')를 추가해서 값이 문자열로 들어온다. 즉, 파라미터가 String 형태로 들어와 자동적으로 '파라미터' 형태가 된다.
예를 들어, #{test}의 test 값이 abc라면 쿼리문에는 USER_ID = 'abc'의 형태가 된다. 쿼리 주입을 예방할 수 있어 보안에 효과적이다. ${ } 데이터에 따라 파라미터의 자료형이 변경된다.
즉, 파라미터가 바로 출력된다. 쿼리 주입을 예방할 수 없어 보안에 취약하다.
따라서 사용자의 입력을 받는 데이터는 사용하지 않는 것이 좋다. 테이블이나 칼럼명을 파라미터로 전달하고 싶을 때 사용한다. #{ }은 자동으로 따옴표(' ')가 붙어서 이 경우에는 사용할 수 없다.
예를 들어, 다음과 같이 아이디와 비밀번호를 입력받아 데이터를 확인하기 위한 테이블이 있다고 하자. SELECT * FROM user WHERER id = ${id} AND pw = ${pw} id 값으로 'admin' -- 이 입력되는 경우 실제...
#
DB
#
Happy한
#
MyBatis
#
달러
#
따옴표
#
샵
#
차이
#
챙이
원문 링크 : [MyBatis] 샵(#{ })과 달러(${ })의 차이