반응형

시작하기에앞서 참고 자료

 

*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에서 제공 해주는 속성들을 알아보겠습니다.

반응형
  1. 감사 2020.03.10 14:39

    즐겨찾기 하고 갑니다~

  2. 질문 2020.04.14 14:37

    질문있습니다.
    xml에 동적쿼리 작성하고 콘솔로그에 동적쿼리가 안보이면 실패한거맞죠?
    select ***
    from **table
    <where>
    <if test="Id != null and !Id.equals('') ">
    AND ID = #{Id}
    </if>
    <if test="No != null and !No.equals('') ">
    AND No = #{No}
    </if>
    </where>
    ORDER BY *** DESC
    이 문법이 맞는지 궁금합니다.

    • BlogIcon DevHealth .java 2020.04.15 22:06 신고

      MyBatis 문법 에러가 발생하면 콘솔에 뜹니다. localhost로 하실 경우엔 서버를 재시작하면 바로 발생합니다 ^^

      해결 하셨다니 다행입니다. 즐코 하세요!

  3. 정정해야 할 내용이 있습니다! 2021.08.21 06:17

    맨 하단의 null,nullString 체크의 예시 코드 중에 3번째 코드는 문제가 있습니다.
    절대 이와 같이 쓰면 안됩니다.

    3번째 코드
    <if test="!paraName1.equals('') and paraName1!=null">
    </if>

    nullString 체크 후에 null 을 체크하죠.
    근데 애초에 paraName1 이 null 로 들어오면, equals() 메서드를 호출조차 할 수 없어서 에러가 발생합니다.
    null 에는 equals() 메소드 따윈 없는 근본없는 객체니까요

    이런 문제의 소지 때문에 바로 그 밑에 소개하신 4번째 코드처럼 순서를 바꿔서 쓰긴 합니다.
    null 체크를 먼저 후 nullString 을 체크하는 거죠.

    4번째 코드
    <if test="paraName1!=null and !paraName1.equals('')">
    </if>


    그런데 애초에 저렇게 짜잘한 순서까지 외워서 써야할까 짜증이 솟구치는 마음이 들 겁니다.
    사실 외울 필요가 없고 2가지만 습관을 들이면 됩니다.

    1. equals 메서드로 비교할 때는 무적권 null 이 될 여지가 있는 값은 앞에 두지 말자
    (equals 비교시 null 의 될 여지가 있는 놈을 무적권 뒤에 둬야합니다. 당연한 기초지요. )
    2. String 은 무적권 쌍따옴표로 "" 묶자.
    (마이빡티스는 홑따옴표 '' 로 묶으면 문자던 문자열이던 무적권 char 로 간주합니다)

    그러면 위와 같은 순서에 구애 없이 아래와 같은 코드를 자연스럽게 작성하게 될 겁니다.

    // 3번째 코드 (문제의 여지 제거)
    <if test='!"".equals(paraName1) and paraName1!=null'>
    </if>




+ Recent posts