동적쿼리문

 | JSP
2012. 5. 8. 18:17

iBatis 에서 mybatis 로 바뀌면서 바뀐것들 중에 하나가 동적쿼리문에서 쓰는 태그들이다.

iBatis 에 있던 <isEqual/> <isNotEqual/> 요런 것들이

mybatis 에서는 <if test="xxx == 'a'"></if> <if test="xxx != 'a'"></if> 요렇게 대체할 수 있어서 쫌더 간결해 진것 같다.

 

그런데 test="" 요기에서 쓸수 있는 비교연산자들 중에는 null 인지 빈 공백인지 판단하던 <isEmpty/>, <isNotEmpty/> 를 대체할만한 비교연산자가 없었다.

null 인지 공백인지 mybatis 에서 판단하기 위해서는

1
<if test="xxx == null or xxx == ''"></if>

 

 

 

 

 

어째 다른 방법이 없나 쭉 찾아보니까~ 신기하게도 조건문에서 자바 클래스의 메소드를 호출해서 하는 방법이 있었다.

 

클래스를 하나 맨들고 거기에다 boolean 을 리턴해주는 static 메소드들을 뽓 맨들고 고것을 호출하는 방식이다.

내가 작성해본 클래스는 요렇다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package stove99.tistory.com;
 
import java.lang.reflect.Array;
import java.util.List;
import java.util.Map;
 
public class MyComparator {
public static boolean isEmpty(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;
}
public static boolean isNotEmpty(String s){
return !isEmpty(s);
}
}



죠렇게 맨든 클래스를 땡겨다 쓰는 mabatis sql xml 예제는 요렇다.

1
2
3
4
5
6
7
8
9
<select id="testSQL" parameterType="map" resultType="hashmap">
SELECT * FROM TB_TEST
WHERE
1=1
<!-- @패키지.클래스명@호출할메소드(파라메터) -->
<if test="@stove99.tistory.com.MyComparator@isEmpty(keyword)">
AND KEYWORD = #{keyword}
</if>
</select>

@패키지명.클래스@메소드 요렇게 호출해야 되기 때문에 패키지나 클래스명은 간단하게 명명하면 좋을것 같다.

이 글은 스프링노트에서 작성되었습니다.


'JSP' 카테고리의 다른 글

POI  (0) 2012.05.08
PAGING(sql)  (0) 2012.05.08
Multiple Parameter  (0) 2012.05.08
log4j구현환경제공.  (0) 2012.05.08
MyBatis (odbc프레임웍)  (0) 2012.05.08
Posted by 사라링
BLOG main image
.. by 사라링

카테고리

사라링님의 노트 (301)
JSP (31)
J-Query (41)
JAVA (24)
VM-WARE (0)
디자인패턴 (1)
스크랩 (0)
스트러츠 (3)
안드로이드 (11)
오라클 (45)
우분투-오라클 (1)
이클립스메뉴얼 (6)
스프링3.0 (23)
자바스크립트 (10)
HTML5.0 (17)
정보처리기사 (1)
기타(컴퓨터 관련) (1)
문제점 해결 (3)
프로젝트 (2)
AJAX (4)
하이버네이트 (3)
트러스트폼 (11)
Jeus (2)
재무관리(회계) (5)
정규식 (5)
아이바티스 (8)
취미 (2)
소프트웨어 보안 관련모음 (0)
정보보안기사 (6)
C언어 베이직 및 프로그램 (3)
보안 관련 용어 정리 (2)
넥사크로 (6)
Total :
Today : Yesterday :