( error ) myBatis XML CDATA 에러
ZZOOO
·2021. 6. 2. 20:59
안녕하세요 오늘은 myBatis를 사용하면서 간혹 발생할 수 있는 문법 오류에 대해서 다뤄보겠습니다.
간단하니 부담 갖지 마시고 잘 해결하셨으면 좋겠습니다.
들어가기에 앞서 ..
myBatis XML 특징 & 장점
- 사용하기 간편한 Persistent framework 이다
- Persistence Framework는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다.
( 출처 - 위키백과 )
- 수동적인 파라미터 설정과 mapping 구문을 제거할 수 있다.
- SQL문과 프로그래밍 코드를 분리하여 소스 정리와 유지보수가 더 편리해진다.
- JDBC에서 제공하는 기능 대부분을 MyBatis에서 제공한다.
간단하게 이 정도의 특징과 장점이 있습니다. 본인의 개발 목적에 맞게 적절히 사용하시면 되겠습니다.
무분별한 라이브러리 사용은 자칫 .. 대형사고로 이어질 수 있습니다.
구현 목표
본인이 구현하고자 하는 기능은 다음과 같습니다.
2021-05-01 ~ 2021-06-01 기간 사이에 발생한 라이선스 총합 개수를 Type 별로 나타낸다.
음 .. 이렇게 말씀드리면 직관적이지 않아 이해가 안 되실 수 있습니다.
쉽게 설명하자면 다음과 같습니다.
지난주부터 오늘까지 철수랑 영희랑 민수 세 명이 각각 밥을 몇 끼 먹었는지 말해줘 ~
그렇다면 다음과 같은 결과를 원하겠죠 ?
철수 - 20끼 / 영희 - 15끼 / 민수 - 42끼
구현 쿼리
SELECT
IFNULL(SUM(CASE LICENSE_TYPE WHEN 1 THEN 1 ELSE 0 END), 0 ) AS type1,
IFNULL(SUM(CASE LICENSE_TYPE WHEN 2 THEN 1 ELSE 0 END), 0 ) AS type2,
IFNULL(SUM(CASE LICENSE_TYPE WHEN 3 THEN 1 ELSE 0 END), 0 ) AS type3
FROM license_state_history_tbl
WHERE 등록 날짜 > STR_TO_DATE(#{start_date}, '%Y-%m-%d %H:%i:%S')
AND 등록 날짜 < STR_TO_DATE(#{끝 날짜},'%Y-%m-%d %H:%i:%S') AND 번호 = #{번호}
( 예시를 들어 작성해보았습니다 )
에러 발생
다음과 같은 경고가 뜨며 에러 표시가 발생했습니다.
에러 발생 원인
myBatis xml 소스를 작성해보신 분들은 아시겠지만 구문 형식이 다음과 같습니다.
<select id = "getAllStudentName" resultType = "StudentENTITY">
SELECT sit.name FROM student_info_tbl sit;
</select>
이런 형태를 지닌 쿼리문으로 이뤄져 있는 것이 myBatis xml 파일입니다.
헌데 좀 전에 제가 구현하고자 하는 조건이 어떤 것이었죠?
2021-04-01 ~ 2021-05-01 사이에 ....
네 그렇습니다. 범위를 설정해주어야 합니다. 내부 table의 구조가 between 함수를 사용할 수 없는 구조라
사용하지 못하고 ">" , "<" 와 같은 부등호로 값을 추출해야 하는 상황이었습니다.
하지만 xml에서 태그의 시작을 "<" 로 열고 "/>" 로 닫다 보니
범위를 나타내기 위한 목적으로 "<" 나 ">"를 사용했을 때 오류가 발생하는 것입니다.
그래서 해결할 수 있는 문법이 다음과 같습니다.
SELECT 추출값
FROM 추출하고자하는 테이블명
WHERE 등록 날짜 <![CDATA[ > ]]> STR_TO_DATE(#{시작 날짜}, '%Y-%m-%d %H:%i:%S')
AND 등록 날짜 <![CDATA[ < ]]> STR_TO_DATE(#{끝 날짜}, '%Y-%m-%d %H:%i:%S')
...
다음과 같이 부등호를 <![CDATA[ ]]> 로 감싸주면 되는 것입니다.
이렇게 한다면 오류가 발생하지 않고 구현하고자 하는 조건에 맞게 쿼리문이 잘 실행될 것입니다.
도움이되셨길 바라며 이상 포스팅 마치겠습니다. 감사합니다.
'개발( Dev ) > 에러 ( Error )' 카테고리의 다른 글
( JAVA ) JAR ? WAR ? 차이점 알아보자 (1) | 2021.08.09 |
---|---|
( TOMCAT ) 톰캣 캐시 부족 현상 간단 해결 (0) | 2021.08.05 |
( DATABASE ) mariaDB INSERT 사용시 중복(Duplicate Error) 해결 (0) | 2021.04.13 |
( DataTables ) Cannot reinitialise DataTable Error 해결 (3) | 2021.04.07 |
(Spring + Thymeleaf) Error SpelEvaluationException (0) | 2021.03.29 |