'#'
주로 조건문이나 반복문을 나타냄
<if>, <foreach> 와 같은 제어 구조를 나타낼 때 사용. 주로 템플릿 엔진에 사용.
<if>, <foreach>는 SQL 쿼리의 조건을 동적으로 구성하기 위해 사용.
- #{...} 문법은 MyBatis에서 파라미터 바인딩을 위해 사용되는 것.
- 해당 위치에 값이 쿼리에 바인딩되어 PreparedStatement와 유사한 방식으로 동작하여 SQL Injection 공격을 방지
** 값을 바인딩한다는 것은 SQL 쿼리에 변수나 파라미터 값을 전달하여 해당 값을 사용하여 쿼리를 실행하도록 만드는 것을 의미
'$'
- 주로 변수나, 표현식을 나타냄.
- 변수의 값을 출력하거나, 표현식의 결과를 삽입할 때 사용.
- SQL 쿼리의 파라미터나 동적 쿼리의 값을 삽입하기 위해서 사용.
- 주로 텍스트 치환에 사용. 즉, 해당 위치에 변수의 값을 삽입하거나 표현식을 평가하여 그 결과를 삽입하는 데 사용.
- SQL 매퍼 프레임워크에서는 주로 $ 기호를 사용하여 동적으로 쿼리를 생성하거나 조건문을 처리.
예를 들어, MyBatis에서는 ${...}를 사용하여 동적인 SQL 쿼리를 생성하거나 조건에 따라 쿼리 변경 가능.
${...}는 해당 변수나 표현식의 값을 쿼리에 삽입하는 데 사용.
${...} 안에는 표현식이나 변수가 올 수 있음
차이점 요약
'#'
주로 파라미터 바인딩에 사용되며, SQL Injection을 방지하고 템플릿 엔진에서 변수를 처리하는 데에도 사용.
'$'
주로 텍스트 치환에 사용되며, 동적 쿼리 생성이나 변수 처리를 위해 사용.