본문 바로가기

IT칼럼/JAVA

myBatis/iBatis 특수문자 사용하기 CDATA

myBatis 에서 XML 쿼리 사용시 (예, <,  >, \ ) 사용 시  <![CDATA[]]> 로 특수문자를 감싸지 않으면 쿼리 사용 시 에러가 발생한다. 

태그내 존재하는 <tag> 꺽쇠랑 동일하기 때문에 혹은 \ 같은 경우 escape 문자로 인식하기 때문에 다음 문자를 빼고 동작하기 때문이다..

이를 해결하기 위해서 특수 문자 에 꼭 <![CDATA[]]> 로 감싸 주워야 한다. 

1. CDATA 섹션

 - 정의

CDATA 섹션 내의 문자나 기호는 태그 형식이나 코드로 인식하지 않고 그대로 문자 형식으로 취급 되므로 특수 문자가 많은 경우에는 CDATA 섹션을 이용하면 유용함

- 예제

<![CDATA[

SELECT * FROM HELLO WHERE A>B AND A<C 

]]>

2. 사용법

- 예제

SELECT * FROM HELLO WHERE A<![CDATA[>]]>B

CDATA를 사용하지 않고 myBatis에서 사용하면, 아래와 같이 처리 된다..

SELECT * FROM HELLO WHERE A &gt; B

3. 주의사항

 A. <![CDATA['compare']]> 사이 공백 사용하면 안됨

B. CDATA 사이에 또다른 CDATA 섹년 포함 안됨

C. 키워드  CDATA는 반드시 대문자 사용

D. CDATA 섹션은 요소 컨텐츠 내 문자 데이터 어디에나 삽입 가능 (단, XML 태그 내에서는 사용불가)