Spring/MyBatis

[MyBatis] 동적 쿼리 if문 문법 총 정리

.java 2019. 11. 4. 15:31
반응형

시작하기에앞서 참고 자료

 

*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>

 

굳이 && 사용하실 분들이 있다면 굳이!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

&amp;&amp;

<if test='paraName1 == "Y" &amp;&amp; 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 속성

다음은 MyBatis에서 제공 해주는 속성들을 알아보겠습니다.

반응형