본문 바로가기
IT 공부/자바와 웹 애플리케이션

[마이바티스] - 동적 쿼리 아주 간단한 예시

by exdus3156 2024. 1. 20.

 

 

mybatis – 마이바티스 3 | 동적 SQL

동적 SQL 마이바티스의 가장 강력한 기능 중 하나는 동적 SQL을 처리하는 방법이다. JDBC나 다른 유사한 프레임워크를 사용해본 경험이 있다면 동적으로 SQL 을 구성하는 것이 얼마나 힘든 작업인지

mybatis.org

 

마이바티스의 장점 중 하나는 동적 쿼리를 작성할 수 있다는 점인데, 동적 쿼리란 조건에 따라 쿼리 자체를 뜯어 고치는 것을 말한다. 단순히 #{} 구문으로 데이터를 집어 넣는 개념과는 다르다.

예를 들어, 위와 같은 쿼리를 작성할 수 있을 것이다.

이 코드는 <where> 태그를 이용해 조건절을 동적으로 생성하고 있다. 예를 들어, finished의 값이 true라면 finished=1 조건을 넣고 싶고, false라면 조건을 넣고 싶지 않고 싶을 때 사용한다.

<where> 같은 태그는 매우 유용한데, 만약 <where> 태그 내부에 어떤 조건도 명시하지 않는다면 자동으로 WHERE 라는 단어를 빼버린다. (만약 아무 조건 없는 WHERE 키워드가 있다면 SQL 문법 오류다.)

또는 <where> 태그 내부의 SQL 문이 OR이나 AND로 시작하게 되면 자동으로 그것을 빼준다. 예를 들어, WHERE AND finished = 1... 이란 SQL문법은 오류일 것이다. 이것을 자동으로 WHERE finished = 1 이렇게 바꿔주는 것이다.

<trim> 같은 태그는 접두사와 접미사를 붙여준다. 위 예제는 사실 trim을 적극적으로 사용하지 않아도 된다. trim 태그는 접두사와 접미사를 동시에 사용할 때 유용하다.

JPA를 사용하면 이것이 Java 코드로 변환되어 사용하고 개인적으로 이것이 더욱 직관적이고 간편하다고 생각한다. 그래도 만약 SQL문을 직접 다루는 MyBatis를 사용하게 된다면 동적 쿼리 구문을 작성하는 방법은 익히는 것이 좋을 것 같다. 

현재 나는 마이바티스를 잘 사용하진 않기 때문에 마이바티스에서는 동적 쿼리를 위와 같은 방식으로 만들 수 있다는 감각만 유지하고 있다.