Web/MyBatis
[MyBatis] CDATA : XML 쿼리에서 부등호 / 비교연산자 에러 해결하기
s_ih_yun
2022. 8. 30. 23:40
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