본문 바로가기
내생각들

Spring MyBatis SAXParseException 오류...

by 코딩마스터^^ 2024. 7. 22.

    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180
        Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
            Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
                Caused by: org.springframework.beans.factory.BeanCreationException at BeanDefinitionValueResolver.java:377
                    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:795
                        Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:648
                            Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:177
                                Caused by: java.io.IOException at SqlSessionFactoryBean.java:700
                                    Caused by: org.apache.ibatis.builder.BuilderException at XPathParser.java:262
                                        Caused by: org.xml.sax.SAXParseException at ErrorHandlerWrapper.java:204

 

개빡친다

 

이 오류 보다가 지난주에 해결 못 하고 퇴근했다... 챗지피티는 자꾸 딴소리함 

오류가 없다고

 

 

https://everyflower.tistory.com/167

 

Mybatis XML SAXParseException Exception 해결하기

Caused by: org.xml.sax.SAXParseException; 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다. 이런 오류를 보신적이 있으신가요? Mybatis사용중에 발생한 오류인데요. 많이 써왔

everyflower.tistory.com

이 블로그 글 발견

 

어쩐지 분명 쿼리콘솔에서는 멀쩡한데 XML안에서 돌리니까 데이터가 이상했다.

 

XML은 <> 부등호에 예민하구나...

 

 

SELECT
    CASE
        WHEN DATEDIFF(CURDATE(), employee_date) <= 365 THEN '1년 이하'
        WHEN DATEDIFF(CURDATE(), employee_date) > 365 AND DATEDIFF(CURDATE(), employee_date) <= 5 * 365 THEN '1년 초과 5년 이하'
        WHEN DATEDIFF(CURDATE(), employee_date) > 5 * 365 AND DATEDIFF(CURDATE(), employee_date) <= 10 * 365 THEN '5년 초과 10년 이하'
        WHEN DATEDIFF(CURDATE(), employee_date) > 10 * 365 AND DATEDIFF(CURDATE(), employee_date) <= 15 * 365 THEN '10년 초과 15년 이하'
        ELSE '15년 초과'
        END AS employment_duration,
    COUNT(id) AS member_count
FROM
    member
GROUP BY
    employment_duration
ORDER BY
    employment_duration;

위의 쿼리에서

 

    <select id="durationInfo" resultType="java.util.HashMap">
        SELECT
            CASE
                WHEN DATEDIFF(CURDATE(), employee_date) &lt;= 365 THEN '1년 이하'
                WHEN DATEDIFF(CURDATE(), employee_date) &gt; 365 AND DATEDIFF(CURDATE(), employee_date) &lt;= 5 * 365 THEN '1년 초과 5년 이하'
                WHEN DATEDIFF(CURDATE(), employee_date) &gt; 5 * 365 AND DATEDIFF(CURDATE(), employee_date) &lt;= 10 * 365 THEN '5년 초과 10년 이하'
                WHEN DATEDIFF(CURDATE(), employee_date) &gt; 10 * 365 AND DATEDIFF(CURDATE(), employee_date) &lt;= 15 * 365 THEN '10년 초과 15년 이하'
                ELSE '15년 초과'
                END AS employment_duration,
            COUNT(id) AS member_count
        FROM
            member
        GROUP BY
            employment_duration
        ORDER BY
            employment_duration;
    </select>

이렇게 바꿈.

 

챗지피티 선생님 말씀

MyBatis 매퍼 파일에서 XML 구문을 해석할 때, 부등호(<, >)는 특수 문자로 인식되어 문제가 발생할 수 있습니다. 이를 해결하기 위해 XML 엔티티를 사용해야 합니다. 부등호는 각각 &lt;와 &gt;로 치환해야 합니다.

 

 

해결 완료^^

댓글