이번 시간에는 "MyBatis_#{}, ${} 차이"에 대해 다뤄보겠습니다.
우리는 Mybatis를 이용해 xml에서 쿼리문을 작성할때 아래처럼 #{} 방식으로 데이터를 받는 형태를 자주 접하게 된다. 오늘은 데이터를 받을때 사용하는 #{}, ${} 방식에 대해 알아보도록 하자.
SQL을 실행할 수 있는 객체는 PreparedStatement 와 Statement이 있다. 자세하게 설명하다간 글의 요지와 벗어나니 컴팩트하게 정리해보자면
위 내용을 숙지한뒤 아래 두 방식을 비교해보자.
사용시 Statement를 생성한다.
Statement 매개변수 값을 그대로 전달한다.(= 문자열에 따옴표가 붙지 않는다.)
평가: 매개변수값을 그대로 전달하기 때문에 문자열도 그대로 전달되므로 SQL Injection 같은 보안상의 위험요소가 존재한다. 또한 반복수행이 많은경우가 많아 일반적으로 #{}를 자주 접하지만 굳이..굳이.. 이걸 쓴다면 ORDER BY 함수를 사용할 때 자동으로 따옴표가 붙으면 함수가 동작하지 않기 때문에 ${}를 써야한다.