💻 하나씩 차곡차곡/Back-end
[자바/JAVA] mapper 쿼리문에 사용되는 ${}, #{} 의 차이점 (myBatis)
뚜루리
2021. 9. 27. 09:00
728x90
320x100
Mybatis를 사용하는 프로젝트 에서 mapper쿼리문에 파라미터 값 설정할 때
$,{} 또는 #{}을 사용하게 되는데, 이 둘의 차이점에 대한 내용.
${}
- 값이 넣어진 채로 쿼리문이 수행.
- 파라미터의 값이 바뀔 때마다 새로운 쿼리로 인식 하기 때문에 항상 쿼리문 파싱을 진행해야 함. (즉, 성능상의 단점이 존재)
- ‘’(작은 따옴표)가 붙지 않기 때문에 테이블 이름이나 컬럼이름을 동적으로 결정될 때 사용할 수 있음.
- SQL injection에 취약함.
#{}
- 파싱될 때 ?로 바뀌어짐.
- preparedstatement를 생성하기 때문에 ?에 파라미터가 바인딩 되어 수행됨.
- 이렇게 파싱된 쿼리문은 재활용(캐싱)되기 때문에 효율적임.
- 변수에 자동적으로 ‘’(작은따옴표가)가 붙기 때문에 ‘#{}’ 이런 형태로 하지 않아도 됨.
- 출처 및 참고 : https://mine-it-record.tistory.com/300
728x90
320x100