728x90
${} 와 #{} 차이점
#{}
- 파라미터가 String형태로 들어와 자동적으로 파라미터 형태가 된다 = 값에 ' '가 자동으로 붙음
- 예를들어 #{username}의 username의 값이 abc라면 쿼리문에서는
- USERNAME = 'abc'의 형태가 된다.
- PreparedStatement 통해 악의적인 쿼리주입을 예방할 수 있음
- 보완차원에서 유리
- 주로 사용자의 입력을 전달할때 사용
- Mapper
SELECT * FROM MEMBER WHERE ID = #{ID} and PW = #{PW}
매퍼에서 이러한 쿼리를 mysql로 보낸다고 가정하면
- Mysql
SELECT * FROM MEMBER WHERE ID = ? and PW = ?
Mysql은 이런식으로 받아오게되고 컴파일한다
- 실제 실행시
SELECT * FROM MEMBER WHERE ID = 'json' and PW = 'ihatehim2'
실제 실행시 이렇게 변경이 되어서 받아진다
${}
- 파라미터가 바로 출력된다. = ' '가 자동으로 붙지않음
- 해당 컬럼의 자료형에 맞추어 파라미터의 자료형이 변경된다
- Statement 방법으로 파라매터가 출력되어서 전달됌
- 의도적인 쿼리주입을 막을 수 없음
- SQL injection 보안 위험 발생 가능
- 테이블이나 컬럼명을 파라미터로 전달하고 싶을때 사용한다
- Mapper
SELECT * FROM MEMBER WHERE ID = '${ID}' and PW = '${PW}'
${}는 상수값을 그대로 받아오기 때문에 '가 자동생성되지 않음
문자열을 받아올 땐 직접 ' 를 적어주어야함
- Mysql
SELECT * FROM MEMBER WHERE ID = 'json' and PW = 'ihatehim2'
Mysql은 이런식으로 받아오게되고 컴파일한다
- 실제 실행시
SELECT * FROM MEMBER WHERE ID = 'json' and PW = 'ihatehim2'
출처 : https://logical-code.tistory.com/25
출처 : https://velog.io/@ajongs/Mybatis-%EC%99%80-%EC%B0%A8%EC%9D%B4
728x90
'STUDY > DB SQL' 카테고리의 다른 글
[SQL] 오라클 ORA-00984: 열을 사용할 수 없습니다. (0) | 2023.06.08 |
---|---|
[SQL] NOT NULL ENABLE / NOT NULL DISABLE (0) | 2023.06.08 |
[MyBatis] resultType resultMap parameterType parameterMap (0) | 2023.05.24 |
[SQL] 오라클 ORA-01810: 형식 코드가 두 번 나타났습니다 (0) | 2023.03.30 |
[SQL] 오라클 날짜 검색 방법 총 정리 (0) | 2023.03.30 |