MyBatis isNull isEmpty 사용하기

2017. 6. 28. 11:02framework/MyBatis


MyBatis isNull, isEmpty 사용하여 문자열 비교하기

 

Ibatis 에는 isNull, isEmpty가 있었지만 MyBatis에는 없다.

 

기타 다른 태그들 역시 사라지고 없지만 이번 포스팅에서는 문자가 null인지 또는 공백인지에 대해 체크하는 방법에 대해서 살펴 보려고 한다.

 

가장 흔하게 비교하는 것이 값이 null인지 공백인지 체크하는게 아닌가 싶다.

 

보통은 다음과 같이 null인지 공백인지 체크를 동시에 한다.

 

1
<if test='str == null && str == ""'>
cs

 



 

하지만 MyBatis에서는 OGNL(Object Graph Navigation Language) 의 이슈가 있다.(참고 http://cofs.tistory.com/96)

 

그래서 위의 방법은 좋은 방법이 아니라고 생각한다.

 

더 확실한 방법이 필요하다.

 

찾아보니 MyBatis 의 다이나믹쿼리에서 Java의 함수를 가져다 사용할 수 있다는 것을 알게되었다.

 

Java의 util 클래스들을 보면 사용하기 편하도록 미리 선언해둔 것들이 많이 있다.

 

예를 들면 이런 함수들도 많이 사용한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    /**
     * Object type 변수가 비어있는지 체크
     * 
     * @param obj 
     * @return Boolean : true / false
     */
    public static Boolean empty(Object obj) {
        if (obj instanceof Stringreturn obj == null || "".equals(obj.toString().trim());
        else if (obj instanceof List) return obj == null || ((List<?>) obj).isEmpty();
        else if (obj instanceof Map) return obj == null || ((Map<?, ?>) obj).isEmpty();
        else if (obj instanceof Object[]) return obj == null || Array.getLength(obj) == 0;
        else return obj == null;
    }
 
    /**
     * Object type 변수가 비어있지 않은지 체크
     * 
     * @param obj
     * @return Boolean : true / false
     */
    public static Boolean notEmpty(Object obj) {
        return !empty(obj);
    }
cs

 

이 함수를 이용하면 별다른 이슈 없이 변수의 값이 null인지 비어있는지 체크할 수 있다.

 



 

사용방법은 다음과 같다.

1
<if test="@framework.util.CommonUtil@empty(str)">
cs

 

 

패키지.클래스@(파라미터) 로 사용할 수 있다.
cs