티스토리 뷰

mariaDB

Mybatis if 문자열 비교

xemaker 2019. 1. 29. 21:55
mybatis 문자열 비교를 하다가 삽질을 해서 재발을 막고자 정리해 본다.

내가 삽질한 케이스는..

예제에는 'GUBUN' 이런식으로 비교 하는게 있어서 'A' 이런식으로 테스트를 했는데 이상하게 비교가 안되는 거였다.

아래글 처럼 문자열은 ' 게 먹히는데 문자는 '게 안먹힌다.


1. isEmpty(str) 문자열이 널 또는 빈 문자열인지 검사

        방법 1.

             <if test="str != null and str != ''">

             

             비교문 중 &&는 and 또는 && 로 변환해서 사용

             같다 라는 == 는 == 또는 eq로 변환해서 사용할 수 있음

             <if test="userId != null && ''.equals(userId)">

        방법 2.

             자바로 함수를 만들어 Mybatis에서 호출하는 형식 (출처 첫번째 링크를 따라가면 자세히 알수 있다)

            

              - default package 일 때

              <if test="@Ognl@isNotEmpty(userId)">
                   and user_id = #{userId}
              </if>

            

              - 패키지가 있을 때

             <if test="@com.web.common.MybatisUtils@isNotEmpty(userId)">


2. isEquas(str) 문자열 비교

   

    <if test="userId == 'hong'"> 이렇게 써도 될것 같지만 에러가 난다.

    Mybatisl에서는 변수가 자바객체처럼 사용되므로 자바에서 사용되는 문자열 비교 메소드를 이용하면 된다.

    싱글쿼테이션과 더블쿼테이션을 잘 보자. ""는 문자열이고 ''는 문자이다.

    equals로 비교할 때에는 ''으로 처리할 경우 비교대상 문자가 한글자이면 비교되지 않지만 두글자 이상이면 싱글쿼테이션으로도

    비교가 가능하다. 문자열은 ""로 처리하는게 나을듯 싶다.

    참고로 equalsIgnoreCase는 대소문자 비교뿐만 아니라 ''만으로도 문자열 비교가 된다. 단 비교할 문자를 먼저 쓴 경우에 당연히 에러.


    <if test='userId.equals("hong")'>  (O)

    <if test='userId == "hong"'>  (O)

    <if test="userId == 'hong'">  (Error)

    <if tset='userId == "h"'>  (O)

    <if test="'hong'.equals(userId)">  (O)

    <if test="'h'.equals(userId)'>  (X)

    <if test="userId.equals('h')">  (X)

    <if test="userId == 'hong'.toString()>  (O)

    <if test="userId eq 'hong'.toString()>  (O)

    <if test="userId.equalsIgnoreCase('hong')">  (O)

    <if test="userId.equalsIgnoreCase('h')">  (O)

    <if test="'h'.equalsIgnoreCase(userId)">  (Error)


3. NumberFormatException 발생시

   <if test=" 파라미터 != null and 파라미터 == ' Y '  ">

      and 필드명 = #{파라미터}

   </if>

   위와 같은 쿼리 실행시 NumberFormatException이 발생한다.

    

아래의 조건으로 해결할 수있다 하지만 싱글쿼터와 더블 쿼터에 주의해야한다.

자바단에서 set( ' Y ' )  저장하는경우 ->  

  <if test=" 파라미터 != null and 파라미터.equals( ' Y ' ) " >


자바단에서 set( " Y " )  저장하는경우 ->     

   <if test=' 파라미터 != null and 파라미터.equals( " Y " )' >          


자바에서 문자로 저장할때와 문자열로 저장할때 싱글쿼터/더블쿼터로 구분해서 사용해야한다.

출처
https://sinpk.tistory.com/m/entry/Mybatis-if-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함