[MyBatis] 동적 쿼리 if문 문법 총 정리
시작하기에앞서 참고 자료
*ibatis 비교문 지원 태그
isNull : "널일경우"
isNotNull : "널이아닐경우"
isEmpty : "공백일경우"
isNotEmpty : "공백이아닐경우"
isGreaterTan : ">"
isGreaterEqual : ">="
isLessThan : "<"
isLessEqual : "<="
isEqual : "=="
isNotEqual : "!="
*ibatis : mybatis의 옛 버전
MyBatis 비교문 지원 태그
<if> : 단일 조건문
<choose> <when> <otherwise> : 다중 조건문
*ibatis에는 isNull, isEmpty가 있었지만 MyBatis에는 없다.
문자열 비교
paraName1 이라는 파라미터가 null이 아니면서 값이 "test"와 동일한가?
<if test='paraName1 != null and(paraName1 eq "test".toString())'>
</if>
paraName1 이라는 파라미터가 "all" 이라는 문자와 동일 하지 않은가?
<if test='!paraName1.equals("all")'>
</if>
대소문자 관계없이 비교
paraName1 이라는 파라미터가 null이 아니면서 값이 "test" or "TEST"와 동일한가?
<if test='paraName1 !=null and paraName1.equalsIgnoreCase("test")'>
</if>
특정 값 비교
paraName1 이라는 파라미터의 값이 "Y"인지 검사할 경우
<if test='paraName1== "Y"'></if>
paraName1 이라는 파라미터의 값이 공백인지 검사할 경우
<if test='paraName1 == " "'></if>
주의 : 작은 따옴표가 밖에 있어야 한다.
숫자 비교
paraName1 이라는 파라미터의 값이 3보다 큰가?
<if test='paraName1 > 3'></if>
paraName1 이라는 파라미터의 값이 3보다 크거나 같은가?
<if test='paraName1 >= 3'></if>
paraName1 이라는 파라미터의 값이 3보다 작은가?
<if test='paraName1 < 3'></if>
paraName1 이라는 파라미터의 값이 3보다 작거나 같은가?
<if test='paraName1 <= 3'></if>
paraName1 이라는 파라미터의 값이 숫자로 된 문자열일 경우
<if test='paraName1 > "3"'></if>
//비교할 값을 쌍 따옴표로 묶어준다.
주의
요소 유형 "null"과(와) 연관된 "test" 속성의 값에는 '<' 문자가 포함되지 않아야 합니다.
이러한 예외가 발생하였다면?
원인
if 태그 안에 ">" 괄호를 인식하지 못하는 거다. 그렇다면 CDATA를 쓰면 어떨까? 역시 적용되지 않는다.
일단 원인은 ">" 괄호를 XML Parsing으로 인식한 건데, XML Parsing을 Text로 바꿔주는 CDATA 마저 적용되지 않는 현상
해결
기호 |
대체식 |
예제 |
< |
lt |
<if test="paraName1 lt 0"> |
> |
gt |
<if test="paraName1 gt 0"> |
<= (또는 =<) |
lte |
<if test="paraName1 lte 0"> |
>= (또는 =>) |
gte |
<if test="paraName1 gte 0"> |
or 문
||가 아닌 or로 쓰셔야 합니다.
or (O)
|| (X)
paraName1 값이 Y이거나 paraName2의 값이 N인 경우
<if> 문
<if test='paraName1 == "Y" or paraName2 == "N"'></if>
<choose> 문
<choose>
<when test='paraName1 == "Y" or paraName2 == "N"'>
</choose>
굳이 || 를 사용하실 분들이 있다면 굳이!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|amp;|amp;
<if test='paraName1 == "Y" |amp;|amp; paraName2 == "N"'></if>
and 문
&&가 아닌 and로 쓰셔야 합니다.
and (O)
&& (X)
paraName1 값이 Y이고 paraName2의 값이 N인 경우
<if> 문
<if test='paraName1 == "Y" and paraName2 == "N"'></if>
<choose> 문
<choose>
<when test='paraName1 == "Y" and paraName2 == "N"'>
</choose>
굳이 && 를 사용하실 분들이 있다면 굳이!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
&&
<if test='paraName1 == "Y" && paraName2 == "N"'></if>
null,nullString 체크
<if test='paraName1 == null'></if>
<if test="paraName1 == null"></if>
<if test="!paraName1.equals('') and paraName1!=null">
</if>
<if test="paraName1!=null and !paraName1.equals('')">
</if>
정리
1.문자열 비교
2.특정 값 비교
3.숫자 비교
4.or 문
5.and 문
6.null 체크
JPA 쓰자!!!!!!!!!!!!!!!!!!!!!
다음은 MyBatis에서 제공 해주는 이 속성들을 알아보겠습니다.
'Spring > MyBatis' 카테고리의 다른 글
[MyBatis] 동적 쿼리 foreach문 문법 총 정리 (6) | 2020.03.28 |
---|---|
[MyBatis] CDATA 사용하기(feat.<> 괄호,특수문자 문자열로 인식하기) (0) | 2019.12.10 |
[MyBatis] resultType에 넣을 수 있는 값 정리 (6) | 2019.11.07 |
[MyBatis] #{} 와 ${} 개념과 차이점 (0) | 2019.11.01 |
[MyBatis] 관련 오류(예외)시 꼭! 확인해야 될 사항 (0) | 2019.11.01 |