728x90
반응형
쿼리를 작성할때
'<' , '>', '&' 을 사용해야하는 경우가 생기는데
xml 에서 그냥 사용할 경우 태그로 인식하는 경우가 종종 있다.
이럴경우 에러를 뱉어내기 때문에 '태그가 아니라 실제 쿼리에 필요한 코드' 라고 알려줘야 한다.
그때 사용하는 것이 <![CDATA[...]]> 이다.
한마디로
<>(부등호) , &(엔드), ||(오아) 등을 닫는 부등호가 아니라 문자열로 처리하라는 뜻
즉 "XML parser" 를 하지 말자
- XML에서 파싱할 대상으로 인식하지 않도록 그 구역을 지정해주는 것이 CDATA이다.
XML로 파싱을 원하지 않는 구간의 시작에 <![CDATA[를 붙여주고, 구간의 끝에]]> 를 추가하면 해당 구역이 파싱되지 않도록 설정할 수 있다.
<select id="userList" resultType="UserVO">
select * from tbl_member where userId < 5;
</select>
"<" 이러한 괄호로 작성한 경우 "에러발생" 한다.
이유는 즉시 XML parser로 인식했으니 XML parser에선 "<" 가 태그의 시작이기 때문입니다.
이렇기 때문에 부등호로 작성하지 않고 ![CDATA[...]]> 문자열로 처리할 수 있도록 해야한다.
문법
<![CDATA[
쿼리 내용
]]>
CDATA 안에 쿼리를 사용하면 쿼리 내용의 괄호나 특수문자를 XML parser로 인식하지 않고 "문자열"로 인식합니다.
<select id="userList" resultType="UserVO">
<![CDATA[
select * from tbl_member where userId < 5;
]]>
</select>
이렇게 사용하면 SQL 안에 특수문자가 들어가도 문자열로 인식하기 때문에 문제를 해결할 수 있습니다.
조건문 중간에 CDATA 사용하는 방법
if문
<select id="userList" resultType="UserVO">
select * from tbl_member
<if test = "userId != null">
where userId <![CDATA[<]]>5;
</if>
</select>
choose문
<select id="userList" resultType="UserVO">
<![CDATA[
select * from tbl_member where 1=1 ]]>
<choose>
<when test='userId != null and userAddress == "ko"'
<![CDATA[
userAge > 15
]]>
</when>
<otherwise>
<![CDATA[
userAge < 15
]]>
</otherwise>
</choose>
</select>
그 외 이러한 부분도 가능함
<select id="userList" resultType="UserVO">
select *
from tbl_member
where userId <![CDATA[<]]>;
</select>
주의할 점
<![CDATA[...]]> 사용하는 경우 동적 쿼리문을 사용할 수 없기 때문에 쿼리문 전체가 아닌 특수문자 포함된 코드에만 <![CDATA[...]]> 사용해야 합니다.
728x90
반응형
'📌 Back End > └ Spring' 카테고리의 다른 글
[Spring] 소프트웨어 배포 생명 주기 (software release life cycle) (0) | 2023.07.19 |
---|---|
[Spring] Thymeleaf(타임리프)란? (+기본적인 사용법) (1) | 2023.03.16 |
[Spring] 스프링 프로젝트 폴더 빨간색 느낌표(pom.xml) (0) | 2023.03.16 |
[Spring] Spring Framework / STS(Spring Tool Suite) 개념 정리 (0) | 2023.03.16 |
[Spring] Spring Framework 구동원리 기본동작 순서 및 구조 (0) | 2023.03.13 |