다이나믹 쿼리 / if / 공백체크 / 숫자 0 / 이슈 | MyBatis
2016. 1. 5. 17:01ㆍframework/MyBatis
MyBatis 의 다이나믹쿼리 IF 문에서 공백체크를 할 때 숫자 0이 체크가 안되는 이슈가 있다.
ex)
select *
from dual
<where> a
<if test="num != null and num != ''">
</if>
</where>
위와 같을 때 num 변수에 integer type의 0 값이 들어 있다면 num != '' 에서 같다고 판단한다.
이유는
OGNL(Object Graph Navigation Language) 의 문제일 것이라고 예상한다.
http://cofs.tistory.com/96 와 비슷한 문제일 수 있음.... test 해보지는 않았음.
- 해결방법
1. num을 string type으로 전송받는다
2. num != '' 대신에 num.equals("") 사용
3. 커스텀 static 함수 생성 및 사용 [추천 !!!!]
package test.com
public class MybatisCheck(){
/**
* Object type 변수가 비어있는지 체크
*
* @param obj
* @return Boolean : true / false
*/
public static Boolean empty(Object obj) {
if (obj instanceof String) return 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 |
사용법 (다이나믹 쿼리에서 호출
<if test="@test.com.MybatisCheck@notEmpty(num)"></if>
<if test="@패키지.클래스@함수(파라미터)">
</if>
'framework > MyBatis' 카테고리의 다른 글
Mybatis DAO에서 쿼리 추출 및 로그 찍기 (Log 라이브러리 사용안함) (0) | 2018.07.31 |
---|---|
MyBatis isNull isEmpty 사용하기 (0) | 2017.06.28 |
MyBatis resultType이 Map일경우 key를 소문자로 만들기 (2) | 2017.06.28 |
ORACLE | query 로 VO 및 mybatis, ibatis에서 사용할 컬럼, resultMap 자동생성하기 (0) | 2017.01.03 |
Mybatis > RowBounds 의 고찰 (8) | 2016.08.09 |
NumberformatException / if /문자 1글자 비교 / equals / 이슈 | MyBatis (4) | 2016.01.05 |