MyBatis를 사용하다보면 비교연산자(부등호 등)를 사용해서 쿼리문을 작성할 때 만날 수 있는 ⚠️ 에러이다.

The content of elements must consist of well-formed character data or markup.
비교연산자를 태그로 인식해서 발생하는 에러이다!
이 에러를 피하는 방법은 두가지가 있다.✌️
1. CDATA 사용하기
CDATA가 파싱되지 않고 문자열을 문자 그대로 인식할 수 있도록 설정해준다.
CDATA는 <![CDATA[ 🙋♂️🙋♀️ ]]> 로 부등호나 쿼리문을 감싸주면 된다.
/* 부등호에 사용하기 */
SELECT *
FROM TB_ORDER
WHERE ORDER_DT <![CDATA[<]]> #{calFrom}
/* 쿼리문에 사용하기1 */
SELECT *
FROM TB_ORDER
<![CDATA[ WHERE ORDER_DT < #{calFrom} ]>
/* 쿼리문에 사용하기2 */
<![CDATA[
SELECT *
FROM TB_ORDER
WHERE ORDER_DT < #{calFrom}
]>
🚨CDATA를 사용하면서 주의할 점🚨
동적 쿼리문을 생성하는 경우에는 비교연산자가 사용된 코드에만 사용해야한다.
CDATA에 의해 감싸져 있으면 동적쿼리를 사용할 수 없다!
2. 문자엔티티 사용하기
부등호 대신 < 나 > 를 사용하면 된다.
< ➡️ <
> ➡️ >
하지만 이 경우에는 가독성이 떨어지기도 하고
lt, gt 헷갈릴 수 있으니 CDATA를 사용하는 것을 추천한다!😉
[참고]
'MyBatis' 카테고리의 다른 글
| [MyBatis] 샵#{} 과 달러${} 차이 (1) | 2024.12.09 |
|---|---|
| [MyBatis] if 조건절 문자열 비교하기 (0) | 2024.11.11 |