JAVA를 이용해서 일을 하는중에 컴파일을 하는데 알 수 없는 오류가 발생했다.
(해결후에 스샷을 안뜬걸 생각해냄... 하하...)
The content of elements must consist of well-formed character data or markup.
대략 이런 오류 메세지였던거 같다
<select id="testData" resultMap="resultMap"> SELECT A, B, C, D FROM TEST WHERE A > 0 AND B < 0 </select> |
대략 이런 쿼리를 보면 그냥 쿼리만 딱 봤을땐 이상할게 없다

이게 왜?? 머가 문제인가??
DB툴에서 돌려봐도 오류 없이 조회가 잘된다.
결국 이러저리 찾아보다 발견된 이 쿼리가 오류가 난 이유..
해결
결론은 <![CDATA[ ]]> 이걸 사용하지 않아서 발생한 문제다.
스프링 프로젝트에서는 xml에 쿼리문을 작성할 때
<>, <, > 등의 비교연산자나 부등호를 사용하면 해당 문자를 원래 용도로 인식하는게 아니라
태그로 인식해서 오류가 발생된다.
<select id="testData" resultMap="resultMap"> SELECT A, B, C, D FROM TEST WHERE A <![CDATA[ > ]]> 0 AND B <![CDATA[ < ]]> 0 </select> |
이런식으로 비교연산자나 부등호 앞뒤로 <![CDATA[ ]]> 이걸 넣어야 오류없이 제대로 쿼리를 인식함.
<![CDATA[ ]]> 쓰는 방법으로는 쿼리 전체를 감싸거나 부등호나 비교연산자 부분만 감싸던가 하면 된다.
1. 전체를 감싸기
<select id="testData" resultMap="resultMap"> <![CDATA[ SELECT A, B, C, D FROM TEST WHERE A > 0 AND B < 0 ]]> </select> |
2. 필요부분만 감싸기
<select id="testData" resultMap="resultMap"> <![CDATA[ SELECT A, B, C, D FROM TEST WHERE A > 0 AND B < 0 ]]> </select> |
3. 감쌀때 예외로 둬야하는 부분
<if test="testGubun != null and testGubun != ''"> AND C <![CDATA[ > ]]> 1 </if> |
이처럼 쿼리에 조건문이 포함될 경우에는 <![CDATA[ ]]> 안에 넣으면 조건문을 인식하지 못한다.
고로 조건(if, case등)을 사용할때는 <![CDATA[ ]]>의 바깥에 사용하도록 한다.
'공부방 > Java' 카테고리의 다른 글
Autowired 어노테이션 (0) | 2022.11.15 |
---|---|
web.xml 생성 (0) | 2022.11.05 |
Maven없이 JAVA 프로젝트 만들기 (0) | 2022.11.05 |
Tomcat server.xml 분석 (0) | 2022.03.14 |
favicon.ico 에러 (0) | 2021.03.01 |