반응형

CDATA ( <![CDATA[..]]> )

 

개념


쿼리를 작성할 때, '<', '>', '&'를 사용해야하는 경우가 생기는데 xml에서 그냥 사용할 경우 태그로 인식하는 경우가 종종 있다.. 이럴 경우 에러를 뱉어내기 때문에 '태그가 아니라 실제 쿼리에 필요한 코드'라고 알려줘야 한다. 그때 사용하는 것이 <![CDATA[...]]> 이다.

 

한 마디로 <>(부등호),&(앤드),||(오아) 등을 닫는 부등호가 아니라 문자열로 처리하라는 뜻입니다.

 

어렵게 말하자면 "XML parser" 하지 말아라 이겁니다.

 

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>
반응형

+ Recent posts