CDATA
보통 쿼리문을 작성할 때, <>(부등호) 기호를 많이 사용한다. 예를 들어, 특정 날짜 사이의 값을 조회하고 싶은 경우가 있다.
이 쿼리문은 CREATE_AT이 '2022-06-01'와 '2022-07-01' 사이인 값들을 조회하기 위한 쿼리문이다. 그런데 쿼리문들 보면 빨간줄로 에러가 발생한 걸 볼 수 있다. 마우스를 갖다대고 에러 내용을 보면 다음과 같다.
Tag name expected
→ '태그 이름이 올 것으로 예상되는 곳에 아무것도 없다. 그러니 어서 태그 이름을 써라' 이정도로 알아들을 수 있을 거 같다.
그래서 CDATA를 사용해서 해당 '<'를 부등호가 아닌 문자열로 처리하기 위해 사용하는 것이다. 즉, 다음과 같이 추가하면 에러가 사라진 것을 볼 수 있다.
CDATA 문법
<![CDATA[
쿼리문
]]>
CDATA 안에 작성한 쿼리문의 괄호나 특수 문자는 XML parser로 인식하지 않고 "문자열"로 인식한다.
CDATA 테스트
@Test
public void CDATA_테스트(){
boardMapper.getBetweenDay().forEach(board -> System.out.println(board));
}
해당 테스트를 진행하면 CREATE_AT이 '2022-06-01'과 '2022-07-01'사이인 값들이 나올 것이다. 정말 그런지 확인해보자.
결과를 보면 의도한 대로 나온 것을 알 수 있다.
추후에 동적 쿼리문들 정리에 대해 알아보고 CDATA를 적용한 예시를 올리도록 하겠다.
▽ 도움을 주신 분들
[MyBatis] CDATA 사용하기(feat.<> 괄호,특수문자 문자열로 인식하기)
CDATA ( <![CDATA[..]]> ) 개념 쿼리를 작성할 때, '<', '>', '&'를 사용해야하는 경우가 생기는데 xml에서 그냥 사용할 경우 태그로 인식하는 경우가 종종 있다.. 이럴 경우 에러를 뱉어내기 때문에 '태그
java119.tistory.com
Mybatis 에서 CDATA 사용하기
마이바티스에서는 CDATA 구문을 많이 씁니다 이유는 쿼리문에 문자열 비교연산자나 부등호를 처리할 때가있습니다 그러면 < 와 같은 기호를 괄호인지 아니면 비교연산자 인지 확인이 되지않아요
epthffh.tistory.com

'Mybatis' 카테고리의 다른 글
[Mybatis] ${}와 #{}의 차이가 뭘까? (0) | 2022.07.14 |
---|---|
[Mybatis] 동적 쿼리에 대해 알아보자 (0) | 2022.07.13 |
JPA와 Mybatis 차이점 (0) | 2022.06.27 |