#{})PreparedStatement 방식으로 파라미터 값을 안전하게 바인딩
자동으로 파라미터화(따옴표로 감싸서 표현)하기 때문에 SQL 인젝션 공격에 안전하며 타입 처리 자동화
따라서 조건절의 값, INSERT, UPDATE에 들어갈 값 등에 사용 가능
동작 예시
<select id="findByEmail" parameterType="String" resultType="User">
SELECT * FROM users WHERE email = #{email}
</select>
<!-- 실제 SQL -->
SELECT * FROM users WHERE email = '[email protected]'
${})SQL 문자열 자체에 값이 문자열로 치환되어 들어감(Statement 방식)
SQL 인젝션 공격에 대한 위험이 존재하며, 문자열 그대로 치환되므로 따옴표를 직접 붙여야 하는 경우도 있음**(따라서 요청 값을 그대로 사용하는 것은 주의 필요)**
따라서 컬럼명, 테이블명, 동적 ORDER BY절 등의 SQL 구조에 직접 영향을 주는 경우 활용 가능
동작 예시
<select id="findAllByTableName" parameterType="String" resultType="List<Object>">
SELECT * FROM ${tableName}
</select>
<!-- 실제 SQL -->
SELECT * FROM 'samples';