[Mybatis_#{}, ${}]

hamonjamon·2022년 9월 13일
0

#{}

  • 파라미터가 String 형태로 들어와 ""로 감싸진다.
  • 쿼리문 작성 시 #{}의 경우에는 PreparedStatement를 생성하게 되는데 파라미터에 ?가 바인딩되어 수행된다.
  • 예시로 #{user_id}의 user_id의 값이 abc일 경우 쿼리에는 'abc'의 형태가 된다
  • 파싱된 쿼리문은 재활용(캐싱)되기 때문에 효율적이다.
  • 쿼리 주입을 예방할 수 있어 보안 측면에서 유리하다.

${}

  • 파라미터가 String 형태로 들어와 ""로 감싸지지 않아, 테이블이나 컬럼명을 파라미터로 전달하고 싶을 때 사용한다.
	<select id="select" resultType="String" parameterType="Map">
		SELECT
			name AS name
		FROM
			user_#{tableId} // 컬럼명에 ""가 안붙어 bad sql Exception 발생 X
		WHERE
			id = #{id}
	</select>
  • 해당 컬럼의 자료형에 맞춰 파라미터의 자료형이 변경되기에 항상 쿼리문 파싱을 진행하여 성능상에 단점이 존재한다.
  • 쿼리 주입을 예방할 수 없어 보안 측면에서 불리하다.

0개의 댓글