1. #{ } 사용
prepared statement를 사용하여 값을 바인딩하며
SQL Injection의 위험을 줄인다.
그러나, 'LIKE' 절의 와일드카드와 함께 사용하면 예상대로 작동하지 않을 수 있다.
2. ${ } 사용
문자열 치환을 사용하여 값이 직접 SQL문에 삽입된다.
따라서 SQL Injection의 위험이 있다.
그러나, 이 경우 'LIKE'절의 와일드카드와 함께 잘 작동한다.
예제
어떠한 값을 조회하는 sql이 있다.
조건으로 와일드카드가 값 내부에 포함된다면
MyBatis는 해당 위치의 바인딩 파라미터인 #{ } 를 올바르게 인식하지 못한다.
Parameter index out of range (1 > number of parameters, which is 0). 이러한 오류가 발생한다.
(MyBatis가 '%#{location}%' 구조에서 '#{location}'을 올바르게 파라미터로 인식하지 못하여
"오류가 발생했습니다. 파라미터가 제공되지 않았습니다."와 같은 오류 메시지가 출력된 것이다.)
이러한 문제를 해결하기 위해서는
concat 함수나 ${ }를 사용해야한다.
where address like concat('%', #{location}, '%')
where address like '%${location}%'
다만, ${ } 사용은 SQL Injection위험이 있다고하여
나는 concat 함수를 사용했다.
'개인 공부 (23.07~' 카테고리의 다른 글
cmd 명령어 (0) | 2023.08.22 |
---|---|
Docker? 가상화? 리눅스? 클라우드 서비스? 커널? 이해 (0) | 2023.08.21 |
[Spring] 의존성 주입(DI) 개념, 설정, 사용법 (0) | 2023.08.17 |
[HTTP Method] 8가지 개념 (0) | 2023.08.15 |
[REST API] 개념, 특징, URI 규칙 이해하기 (0) | 2023.08.15 |