본문 바로가기
Database/mariaDB

Statement vs PrepareStatement (feat 동적 쿼리)

by amungstudy 2025. 9. 7.

같은 기능이지만 다른 정책을 봐야하는 경우

조회 시 사용하는 쿼리 형태는 같으나 테이블, 컬럼명이 달라지는 경우가 있다.

이때 정책에 따라 사용하는 테이블, 컬렴명을 미리 정의해두고, 쿼리의 인자로 넘겨서 쿼리를 재사용할 수 있다. 

 

개발 환경은 MariaDB, MyBatis와 SpringBoot 이다.

 

1. 미리 enum 으로 조건에 따라 조회 시 사용하는 테이블명, 컬럼명, 코드 등을 정의해놓는다 

2. 쿼리 작성 시 #{}, ${} 를 사용한다

 

#{} 에 문자열을 넣으면 '문자열' 이렇게 변환이 된다.

${} 에 문자열을 넣으면 그대로 문자열이 변환된다.

 

어떻게 가능한가?

 

PrepareStatement에는 보통 변수를 설정하고 바인딩하는 static sql이 사용되고,

Statement에서는 쿼리 자체에 조건이 들어가는 dynamic sql 이 사용된다.

보통 Statement는 SQL Injection이 발생할 수 있다고 하지만, 이를 이용해서 쿼리 구조를 동적으로 변경할 수 있다!

 

 

 

 

 

 

 

 

 

'Database > mariaDB' 카테고리의 다른 글

MyBatis 참고사항(XML 파일 관련)  (0) 2024.05.29