티스토리 뷰

sql querry가 들어있는 mybatis xml파일 내에서 부등호를 사용할 상황은 자주 등장한다.
그중에서도 "크거나 같다", "작거나 같다"에 대한 부등호를 처리해야 하는 경우를 정리하였다.

jsp 내에서 jstl + EL을 경험해본 적이 있는 사용자라면 혼란이 있을 수 있기 때문이다.

jstl + EL 방식에서 "보다 크거나 같다", "보다 작거나 같다"의 부등호는
≥ ≤로 사용을 한다.

이 문법을 그대로 mybatis xml에 사용을 하면 아래와 같이
mybatis BuilderException The entity "ge" was referenced, but not declared.
라는 에러메시지를 확인할 수 있다.

 


jstl 분석

먼저 jstl에서 ≥를 사용할 수 있는 이유를 알아보았다

부등호가 일반적으로 많이 사용되는 c:if 태그를 기준으로 진행해보았다.

jstl을 사용하기 위해서는 standard.jar 또는 jstl.jar가 import 되어있을 것이다.

standard.jar 파일을 디컴파일 해보자

우선 standard.jar 파일에 META-INF\c.tld로 들어가 IF 태그에 대한 선언 확인(주요 부분만 발췌)

 

 <tag>
...
...
...
    <name>if</name>
    <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>test</name> -- c:if 태그 사용중 test 속성
        <required>true</required> --해당 속성 필수 여부
        <rtexprvalue>true</rtexprvalue> -- el 표현식 사용가능 여부 true
	<type>boolean</type>
    </attribute>
...
...
...
  </tag>

 

아래 패키지에 class 파일을 확인

org.apache.taglibs.standard.lang.jstl.parser.ELParserTokenManager.class

 

아래 변수값에 ge에 대하여 ">="가 셋팅된 부분 확인 

public static final String[] jjstrLiteralImages = { "", null, "${", null, null, null, null, null, null, null, null, null, "true", "false", "null", "}", ".", ">", "gt", "<", "lt", "==", "eq", "<=", "le", ">=", "ge", "!=", "ne", "(", ")", ",", ":", "[", "]", "+", "-", "*", "/", "div", "%", "mod", "not", "!", "and", "&&", "or", "||", "empty", null, null, null, null, null };

부등호 부분만 발췌

">", "gt", "<", "lt", "==", "eq", "<=", "le", ">=", "ge", "!=", "ne"

 


mybatis 분석

mybatis 사용하기 위해 maven에서 다운받은 mybatis-3.4.1.jar를 디컴파일 해보았다.

아래 패키지에 class 파일을 확인
org.apache.ibatis.ognl.OgnlParserTokenManager.class

아래 변수값에 부등호 부분 확인  ">="가 셋팅된 부분 확인

public static final String[] jjstrLiteralImages = { "", ",", "=", "?", ":", "||", "or", "&&", "and", "|", "bor", "^", "xor", "&", "band", "==", "eq", "!=", "neq", "<", "lt", ">", "gt", "<=", "lte", ">=", "gte", "in", "not", "<<", "shl", ">>", "shr", ">>>", "ushr", "+", "-", "*", "/", "%", "~", "!", "instanceof", ".", "(", ")", "true", "false", "null", "#this", "#root", "#", "[", "]", "{", "}", "@", "new", "$", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null };

부등호 부분만 발췌

"==", "eq", "!=", "neq", "<", "lt", ">", "gt", "<=", "lte", ">=", "gte"

따라서

mybatis에서 ">=" 부등호를 사용하는 방법은 아래와 같다.

1. <![CDATA[>=]]>
2. &gt;=
3. &gte;

<![CDATA[>=]]>
풀네임은 Character DATA이고 [] 기호 안에 문자는 파싱하지 않고 문자형 데이터 그대로 인식한다.

&gt;=
문자 형식을 보면 알 수 있듯이 mybatis에서는 &ge;는 별도로 지원하지 않고 &gt; 문자에 "="를 연결하여 작성한다.

&gte;
">=" 부호를 나타내며 jstl에서 &ge; 와 동일하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함