Mybatis Mapper의 if 문자열 검사 방법

자욱·2020년 10월 8일
0
post-thumbnail

출처: https://sinpk.tistory.com/entry/Mybatis-if-문자열-비교

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

방법 1.

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

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

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

<if test="userId != null &amp;&amp; ''.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 " )' >		         

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

profile
"What Do You Do with a B.A. in Korean?"

0개의 댓글