mybatis #, $ 차이점

Red Culture·2021년 7월 14일

mybatis #, $ 차이점에 대해서

preparedStatement 와 Statement 의 차이점이다. (동적 과 정적의 차이, '?' 와 '값' 형태의 바인딩)
preparedStatement 방식인 #{}은 ?에 파라미터가 바인딩되어 수행된다. 즉, 변수를 바인드를 하여 ? 값이 달라져도 같은 쿼리로 인식한다. 이렇게 파싱된 쿼리문은 재활용(캐싱)되기 때문에 효율적으로 쿼리의 재사용이 가능하지만, Statement 방식인 ${} 은 값이 넣어진 채로 쿼리문이 수행되므로 파라미터의 값이 바뀔 때마다 항상 쿼리문 파싱을 진행해야 하기 때문에 재사용이 불가능하며 새로운 쿼리로 인식하기 때문에 성능상 차이가 존재한다.

두 가지 중 어떤 경우에 어떤 것을 사용하는 것이 좋을까

$는 자주 바뀌지 않거나 사용자의 입력을 받지 않는 경우 (ex 테이블 명 , 컬럼 명) 에 사용해 주면 좋다. $은 문자열에 자동으로 ' '쿼터를 감싸주지 않는다. SQL Injection 보안 위험이 발생하는 경우가 발생한다.
#은 사용자의 입력을 받거나 데이터가 많은 경우에 주로 사용하는 것이 좋다.

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글