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를 사용하게 된다면 동적 쿼리 구문을 작성하는 방법은 익히는 것이 좋을 것 같다.
현재 나는 마이바티스를 잘 사용하진 않기 때문에 마이바티스에서는 동적 쿼리를 위와 같은 방식으로 만들 수 있다는 감각만 유지하고 있다.
'IT 공부 > 자바와 웹 애플리케이션' 카테고리의 다른 글
[JPA] - Querydsl 스프링부트3.x 설정 방법 (0) | 2024.01.20 |
---|---|
[Log4j2] - MyBatis 데이터베이스 관련 팁 (feat. slf4j Binding) (0) | 2024.01.20 |
[Model Mapper] - Model Mapper 라이브러리 및 DTO, VO가 분리되는 이유 (0) | 2024.01.16 |
[자바] - 커넥션 풀(HikariCP)과 DataSource 스펙 (0) | 2024.01.11 |
[JPA] - 자바 진영의 데이터베이스 처리 기술 발전 (0) | 2024.01.09 |