Web/MyBatis

[MyBatis] CDATA : XML 쿼리에서 부등호 / 비교연산자 에러 해결하기

728x90

 

 

스프링 프로젝트에서 SQL Mapper를 xml 파일에 작성할 때

다음과 같이 그냥 <>, <, > 등의 비교연산자나 부등호를 사용하게 되면,

태그로 인식해서 오류가 발생합니다...!

(빌드되면서 해당 모듈 전체를 사용할 수 없을 수도..저도 알고싶지 않았음 🙃)

<select id="selectTestData" resultMap="ResultMap">
    SELECT *
    FROM TEST_TABLE
    WHERE COL1 > 100
</select>

이와 같이 MyBatis에서 쿼리문 안에 < >를 사용해야할 때 방법입니다 🍉

 

 

 

<![CDATA[ ... ]]>

이런 오류을 해결하기 위해 '태그가 아니라 실제 쿼리에 사용될 코드' 라고 알려주기 위해 사용하는 구문

 

 

CDATA의 사용

 

1. 비교연산자나 부등호만 CDATA로 감싸기

- 일반적으로 많이 사용

<select id="selectTestData" resultMap="ResultMap">
    SELECT *
    FROM TEST_TABLE
    WHERE COL1 <![CDATA[>]]> 100
</select>

 

 

2. 쿼리 전체 감싸기

<select id="selectTestData" resultMap="ResultMap">
    <![CDATA[
    SELECT *
    FROM TEST_TABLE
    WHERE COL1 > 100
    ]]>
</select>

 

 

- 아래와 같이 조건문 태그를 감싸면 안됨! 조건문 태그가 인식이 안됩니다

<select id="selectTestData" resultMap="ResultMap">
    <![CDATA[
    SELECT *
    FROM TEST_TABLE
    WHERE  1=1
    ]]>
        <choose>
            <when col_type =="1"'>
                COL2 > 100
            </when>
            <otherwise>
                COL1 < 100
            </otherwise>
        </choose>
    ]]>
</select>

 

- 조건문 태그가 있다면 다음과 같이 조건문 태그가 인식될 수 있도록 작성하시길

<select id="selectTestData" resultMap="ResultMap">
    <![CDATA[
    SELECT *
    FROM TEST_TABLE
    WHERE  1=1
    ]]>
        <choose>
            <when col_type =="1"'>
                <![CDATA[
                COL1 > 100
                ]]>
            </when>
            <otherwise>
                <![CDATA[
                COL1 < 100
                ]]>
            </otherwise>
        </choose>
</select>

 

 

 

 

 

 

 

 

References

🔗 [물고기 개발자의 블로그] Mybatis 에서 CDATA 사용하기

 

 

 

728x90