[Mybatis] <if> 절을 이용한 Dynamic SQL 구현 (단일 조건)
- DB접근기술/Mybatis
- 2021. 1. 31. 12:25
안녕하세요. 오늘은 마이바티스를 활용하여 간단한 단일 조건문을 구성하는 방법을 소개하겠습니다.
이전에 포스팅했던 choose, when, otherwise를 구성하여 복합적으로 작용하는 dynamic sql을 구현하는 방법을 작성했었는데요.
<if> 절은 상당히 간단하면서도 <when> 절과 거의 똑!같!이! 사용된다고 보시면 됩니다.
일단 보시죠!
구조 및 사용법
select * from tableA where deleted = false <if test="a != null"> and a = #{a} </if> <if test="b != null"> and b = #{b} </if>
일단 가장 일반적으로 활용하는 경우는 select 문의 where 절의 조건으로 넘어온 파라미터의 not null 여부에 따라서 조회 조건에 추가할 지 말지를 결정하는 경우가 있다.
예컨데 리스트 검색의 경우 keyword가 "" 빈문자열로 넘어오는 경우에는 다음과 같이 처리할 수 있다.
select * from tableA where deleted = false <if test="keyword != null and keyword != ""> and keyword = #{keyword} </if>
keyword가 null 인지 null이 아니라면 빈문자열인지 확인하고 검색할 수 있도록 단순하게 구성할 수 있습니다. choose when 같은 복잡한 구조를 통해 xml 파일이 지저분하게 길어지는게 싫다면 선택할 수 있는 간단한 선택지로 여겨집니다.
그리고 가장 먼저 if 하면 떠오르는 상대 키워드는 else 일 것입니다. 하지만.. 마이바티스에서는 if는 단독으로만 생존하고 파트너는 존재하지 않습니다. 즉, <if test=""> 절은 test의 조건에 의해서만 결정이 되며 "그 외"에 해당하는 else가 제공되는 문법이 아닙니다. 만약 default 혹은 else 조건이 필요하다면 <choose>문의 <otherwise>를 활용하시어 개발하시는 것을 추천드립니다.
감사합니다!
'DB접근기술 > Mybatis' 카테고리의 다른 글
[MyBatis] 쿼리문을 재사용하는 방법(sql, include) (0) | 2022.08.25 |
---|---|
[Mybatis] choose절을 이용한 Dynamic SQL 구현 (choose, when, otherwise) (0) | 2021.02.02 |
[Mybatis] update, insert 시 seq 반환받기. (update, insert returning) (0) | 2020.06.08 |
[Mybatis] Spring mybatis, SelectKey 태그 (0) | 2019.09.06 |
[Mybatis] 스프링 mybatis 사용 시, 객체 alias 설정하는 방법 (0) | 2019.07.07 |