[MyBatis] 비교연산자(<, >, <=, >=) 사용하기

yunSeok·2023년 10월 20일
0

MyBatis

목록 보기
4/4

개요

MyBatis에서 쿼리를 작성할 때, 비교연산자를 사용하는 경우 에러가 발생했다...

오류메시지 내용 :
The content of elements must consist of well-formed character data or markup.

-> 요소의 내용이 올바르지 않은 문자 데이터 또는 마크업으로 구성되어있습니다. 라는 내용이었는데


문제점

xml 파일에서 부등호 자체를 태그로 인식을 해서 생기는 문제였다.

<select>, <update>, <delete>, <if>, <choose> ... 처럼

xml parser로 인식되어지는걸 문자열로 처리하도록 수정해줘야한다.


해결법

방법 1. <![CDATA[]]> 사용

<!-- 1. 부등호 안에 사용하기 -->
<select id="selectNoticeList" resultType="Notice">
	SELECT *
	FROM notice
	WHERE notice_idx <![CDATA[<]]> 4
</select>
<!-- 2. 중간에 사용하기 -->
<select id="selectNoticeList" resultType="Notice">
	SELECT *
	FROM notice
	<![CDATA[ WHERE notice_idx < 4 ]]>
</select>
<!-- 3. 전체 쿼리에 사용하기 -->
<select id="selectNoticeList" resultType="Notice">
	<![CDATA[ 
    SELECT *
	FROM notice
	WHERE notice_idx < 4 
    ]]>
</select>

<select>

방법 2. 비교표현식(&lt;, &gt;, &lte;, &gte;) 사용하기

기 호비교표현식
<&lt;
>&gt;
<=&lte;
>=&gte;
<!-- '<' 사용하기 -->
<select id="selectNoticeList" resultType="Notice">
	SELECT *
	FROM notice
	WHERE notice_idx &lt; 4
</select>

참고

동적 SQL 표현식(if, when...)에서 사용하는 방법

✅ 비교표현식 사용

기 호비교표현식의 미
<ltlittle
>gtgreater
<=lelittle or equal
>=gegreater or equal
=, ==eqequal
!=nenot equal

<if test="noticeCount it 100"></if>
<when test="noticeCount it 100"></when>

이런식으로 작성해주면 됩니다.

<!-- if안에 '<' 사용하기 -->
<select id="selectNoticeList" resultType="Notice">
	SELECT *
	FROM notice
	WHERE 1=1
    <if test="noticeCount it 100">
       AND notice_idx = 10
    </if>
</select>
<!-- if안에 '<' + 쿼리문에 부등호 사용하기-->
<select id="selectNoticeList" resultType="Notice">
	SELECT *
	FROM notice
	WHERE 1=1
    <if test="noticeCount it 100">
       AND notice_idx <![CDATA[<]]> 10
    </if>
</select>






참고 사이트
https://seeminglyjs.tistory.com/374
https://codingmomong.tistory.com/404
https://tysoso.tistory.com/50
https://iamfreeman.tistory.com/entry/Mybatis%EC%9D%98-%EB%8F%99%EC%A0%81-SQL-%ED%91%9C%ED%98%84%EC%8B%9D-IF-CHOOSE-WHEN-LIKE-etc
https://blog.enleaf.me/518

0개의 댓글