[MyBatis] CDATA 사용하기(feat.<> 괄호,특수문자 문자열로 인식하기)
2019. 12. 10. 19:17
반응형
CDATA ( <![CDATA[..]]> )
개념
쿼리를 작성할 때, '<', '>', '&'를 사용해야하는 경우가 생기는데 xml에서 그냥 사용할 경우 태그로 인식하는 경우가 종종 있다.. 이럴 경우 에러를 뱉어내기 때문에 '태그가 아니라 실제 쿼리에 필요한 코드'라고 알려줘야 한다. 그때 사용하는 것이 <![CDATA[...]]> 이다.
한 마디로 <>(부등호),&(앤드),||(오아) 등을 닫는 부등호가 아니라 문자열로 처리하라는 뜻입니다.
어렵게 말하자면 "XML parser"를 하지 말아라 이겁니다.
사진을 보시면 "<" 괄호가 연녹색이네요? 엥? 에러가 떴네요?
예 맞습니다. XML parser로 인식했으니 XML parser에선 "<"가 태그의 시작이거든요
다른 설정들도 <내용> 이 포맷이잖아요
이해되셨지요?
그럼 사용해봅시다.
문법
<![CDATA[
쿼리 내용
]]>
CDATA 안에 쿼리를 사용하면 쿼리 내용의 괄호나 특수문자를 XML parser로 인식하지 않고
"문자열"로 인식한다 이말입니다. 문자열로!
다양한 예시
전체 쿼리 CDATA 사용
<select id="getUserList" resultMap="UserVO">
<![CDATA[
select *
from user
where id > 3
]]>
</select>
조건 문 중간에 CDATA 사용
if 문
<select id="getUser" resultType="UserVO">
select * from user
<if test="id != null">
where id <![CDATA[<]]> 3;
</if>
</select>
choose 문
<select id="getUser" resultMap="UserVO">
<![CDATA[
select *
from user
where 1=1
]]>
<choose>
<when test='id != null and user_type =="1"'>
<![CDATA[
salary > 100
]]>
</when>
<otherwise>
<![CDATA[
salary < 100
]]>
</otherwise>
</choose>
</select>
이런 것도가능
<select id="getUser" resultType="UserVO">
SELECT *
FROM user
WHERE id <![CDATA[<]]> ;
</select>
반응형
'Spring > MyBatis' 카테고리의 다른 글
[MyBatis] 동적 쿼리 <where> 문법 총 정리 (3) | 2020.04.05 |
---|---|
[MyBatis] 동적 쿼리 foreach문 문법 총 정리 (6) | 2020.03.28 |
[MyBatis] resultType에 넣을 수 있는 값 정리 (6) | 2019.11.07 |
[MyBatis] 동적 쿼리 if문 문법 총 정리 (5) | 2019.11.04 |
[MyBatis] #{} 와 ${} 개념과 차이점 (0) | 2019.11.01 |