SQL에서 사용하는 ${}와 #{}는 주로 두 가지 다른 목적을 가지고 있다.
${}는 주로 동적인 SQL 쿼리를 작성할 때 사용된다.
SQL을 작성할 때, 사용자로부터 입력받은 값을 쿼리에 넣을 때 쓰인다.
사용자가 입력한 값이나 프로그램의 변수 등을 쿼리에 직접적으로 넣을 수 있게 도와주는 역할을 한다.
조금 더 쉽게 예시를 들어 설명하자면,
${}는 주로 JSP나 서버에서 받은 파라미터들을 쿼리에 직접 넣을 때 사용된다.
JSP나 컨트롤러에서 받은 값들을 ${param.xxx}와 같이 사용하여 쿼리에 동적으로 넣을 수 있다.
SELECT * FROM users WHERE id = ${param.userId}
#{}는 주로 ORM(Object-Relational Mapping) 프레임워크(예: MyBatis)에서 사용된다. 이건 SQL 쿼리를 작성할 때 변수나 값들을 쉽게 넣을 수 있게 도와준다.
그러면 ORM 프레임워크가 쿼리를 실행할 때 자동으로 변수들을 적절한 형태로 변환하여 넣어준다.
이것을 통해 서비스나 DAO(Data Access Object) 레이어에서 값을 매핑하여 쿼리에 넣을 수 있다. 이는 보통 해당 프레임워크가 값을 적절하게 처리하여 쿼리에 넣도록 해준다.
조금 더 쉽게 예시를 들어 이해해보자.
String userId = "123"; // Java 코드에서 userId를 받음
// MyBatis나 Spring JDBC Template에서는
// 이렇게 변수를 넣어 쿼리에서 사용
Map<String, Object> params = new HashMap<>();
params.put("userId", userId);
// MyBatis XML에서 userId를 활용한 SQL 쿼리
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{userId}
</select>
${}는 주로 JSP 등에서 직접 값을 받아서 사용하는 데 활용되고,
#{}는 Java 코드에서 값을 변수로 다룰 때 사용된다.