본문 바로가기
💻 하나씩 차곡차곡/Back-end

[자바/JAVA] mapper 쿼리문에 사용되는 ${}, #{} 의 차이점 (myBatis)

by 뚜루리 2021. 9. 27.
728x90
320x100


Mybatis를 사용하는 프로젝트 에서 mapper쿼리문에 파라미터 값 설정할 때

$,{} 또는 #{}을 사용하게 되는데, 이 둘의 차이점에 대한 내용. 




${}

  • 값이 넣어진 채로 쿼리문이 수행.
  • 파라미터의 값이 바뀔 때마다 새로운 쿼리로 인식 하기 때문에 항상 쿼리문 파싱을 진행해야 함. (즉, 성능상의 단점이 존재)
  • ‘’(작은 따옴표)가 붙지 않기 때문에 테이블 이름이나 컬럼이름을 동적으로 결정될 때 사용할 수 있음.
  • SQL injection에 취약함. 



#{}

    • 파싱될 때 ?로 바뀌어짐.
    • preparedstatement를 생성하기 때문에 ?에 파라미터가 바인딩 되어 수행됨.
    • 이렇게 파싱된 쿼리문은 재활용(캐싱)되기 때문에 효율적임.
    • 변수에 자동적으로 ‘’(작은따옴표가)가 붙기 때문에 ‘#{}’ 이런 형태로 하지 않아도 됨.

 


728x90
320x100