티스토리 뷰
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. >=
3. >e;
<![CDATA[>=]]>
풀네임은 Character DATA이고 [] 기호 안에 문자는 파싱하지 않고 문자형 데이터 그대로 인식한다.
>=
문자 형식을 보면 알 수 있듯이 mybatis에서는 ≥는 별도로 지원하지 않고 > 문자에 "="를 연결하여 작성한다.
>e;
">=" 부호를 나타내며 jstl에서 ≥ 와 동일하다.
'JAVA' 카테고리의 다른 글
java Optional orElse() 의도하지 않은 로직 수행 시 확인사항 (0) | 2023.04.07 |
---|---|
vscode Execution failed for task ':compileJava' 해결 (0) | 2023.02.27 |
[JAVA] javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure (2) (0) | 2021.07.08 |
[java] javax.net.ssl.SSLHandshakeException : Received fatal alert : handshake_failure (0) | 2021.06.08 |
[java] API 호출 안되는 현상 해결 (301 응답코드) (1) | 2020.12.07 |
- Total
- Today
- Yesterday
- Git
- 깨짐
- Oracle
- TLS
- JSON
- SSL
- SQL
- IMAGE
- mybatis
- spring
- Windows
- Java
- web
- gradle
- jQuery
- Linux
- SpringBoot
- 컨테이너
- btye
- jaxen
- Eclipse
- vscode
- parse
- 이벤트발생
- React
- WAS
- JPA
- docker
- html
- 날짜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |