회사에 취직하고나서, 쿼리문을 작성하는데 이상한 점을 발견했다.
바로 Mybatis 를 이용해 XML에 쿼리문을 작성하는데, 파라메터 작성법이 그동안 내가 해왔던 것과는 다른 것이었다.
아래는 그동안 내가 써왔던 방식이다.
<select id="select_list" parameterType="HashMap" resultType="HashMap">
SELECT USER_NM
, USER_ID
FROM USER
WHERE USER_ID = ${USER_ID}
AND USER_PWD = ${USER_PWD}
</select>
그리고 이건 회사에서 사용하는 방식이다.
<select id="select_list" parameterType="HashMap" resultType="HashMap">
SELECT USER_NM
, USER_ID
FROM USER
WHERE USER_ID = #{USER_ID}
AND USER_PWD = #{USER_PWD}
</select>
무슨 차이가 있는지 보이는가? 바로 ${} 가 #{} 로 바뀌었다!
왜? 왜 $을 안쓰고 #을 쓸까? 너무 궁금해서 찾아보았다.
#{}
파라매터가 String 형태로 들어와 자동적으로 '파라메터' 형태가 된다.
예를들어, #{user_id}의 user_id의 값이 abc라면 쿼리문에는 USER_ID = 'abc'의 형태가 된다.
쿼리 주입을 예방할 수 있어 보안측면에서 유리하다.
${}
파라매터가 바로 출력된다.
해당 컬럼의 자료형에 맞추어 파라매터의 자료형이 변경된다.
쿼리 주입을 예방할 수 없어 보안측면에서 불리하다. 그러므로, 사용자의 입력을 전달할때는 사용하지 않는 편이 낫다.
테이블이나 컬럼명을 파라메터로 전달하고싶을 때 사용한다. #{}은 자동으로 ''가 붙어서 이 경우에는 사용할 수 없다.
<select id="select_list" parameterType="HashMap" resultType="HashMap">
SELECT ${COLUMN}
FROM USER
</select>
728x90
반응형
'DB > Mybatis' 카테고리의 다른 글
[MyBatis] 오류 Cause: java.lang.NumberFormatException: For input string: "N" (0) | 2022.05.02 |
---|---|
XML에서 부등호 관련 에러 SAXParseException (0) | 2022.04.27 |
MyBatis - 동적 쿼리 사용하기 (0) | 2021.05.10 |
Mybatis란? (장점, 특징, 컴포넌트) (0) | 2021.05.10 |
댓글