[Mybatis] <if> 절을 이용한 Dynamic SQL 구현 (단일 조건)

안녕하세요. 오늘은 마이바티스를  활용하여 간단한 단일 조건문을 구성하는 방법을 소개하겠습니다.

 

이전에 포스팅했던 choose, when, otherwise를 구성하여 복합적으로 작용하는 dynamic sql을 구현하는 방법을 작성했었는데요.

sas-study.tistory.com/383

<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>를 활용하시어 개발하시는 것을 추천드립니다.

 

감사합니다!

댓글

Designed by JB FACTORY