참조
#{}
- 파라미터가 String 형태로 들어와 자동적으로 파라미터 형태가 됨
- 예) #{user_id} 파라미터 값이 abc인 경우 쿼리문은
USER_ID = ‘abc’
형태로 작성됨
- 쿼리 주입을 예방할 수 있어 보안측면에서 유리
- JDBC API의 PreparedStatement와 비슷하며 장점을 얻을 수 있음
- 파싱 된 쿼리는 캐싱되는데 이에 따라 동일한 쿼리는 컴파일 과정이 필요없기 때문에 효율적
${}
- 파라미터가 바로 입력된
- 해당 컬럼의 자료형에 맞춰 파라미터의 자료형이 변환됨
- 쿼리 주입을 예방할 수 없어 보안측면에서 불리하므로 사용자의 입력을 전달하는 경우 사용하지 않는 편이 좋음(문자열이 입력될 경우 따옴표를 직접 작성하게 되는데 입력값에 따옴표가 있을 떄 문제 발생)
- 테이블의 컬럼명을 파라미터로 전달하고 싶을 때 사용(#{}은 자동으로 따옴표가 붙기 때문에 이러한 경우에는 사용 불가능)
- JDBC API의 Statement와 비슷하여 파라미터가 변경될 때마다 컴파일 수행하기 때문에 상대적으로 비효율적