Statement(정적 쿼리)
- 파라미터가 들어간 완성된 쿼리를 처리한다.
- 재사용이 불가능하여 성능 저하가 나타난다.
- 완성된 쿼리를 처리하므로 SQL Injection1 가능성이 높다(위험도가 높다).
- 주로 테이블명이나 컬럼명이 동적으로 바뀌어야 할 때 사용한다.
x--기본 형태
select * from table where column = 'parameter'
--ibatis 사용 예시
select * from tb where column = '$parameter$'
--mybatis 사용 예시
select * from tb where column = '${parameter}'
statement일 때 자료형이 문자열인 경우 따옴표('')를 반드시 붙여야 한다.
따옴표를 붙이지 않으면 자료형을 숫자로 인식하여 오류가 발생한다.
PreparedStatement(동적 쿼리)
- SQL 쿼리에 바인딩 파라미터를 이용하여 쿼리를 처리한다.
- 쿼리를 한번 컴파일 하면 재사용이 가능하다.
- 비교적 SQL Injection 가능성이 낮다(위험도가 낮다).
xxxxxxxxxx
--기본 형태
select * from table where column = ?
--ibatis 사용 예시
select * from tb where column = #parameter#
--mybatis 사용 예시
select * from tb where column = ${parameter}
1 SQL 삽입(영어: SQL Injection, SQL 인젝션, SQL 주입)은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.↩