본문 바로가기
Develop

[Error] nested exception is org.apache.ibatis.builder.builderexception error evaluating 해결

by 빈급 2023. 9. 14.

 mybatis를 사용하면서 오류가 났습니다. 바쁘실 테니 해결 방법을 바로 알아보겠습니다.
 
 먼저 console창에 뜬 오류를 통해서 위치와 원인을 파악해야 합니다.

에러 화면1

Caused by: org.apache.ibatis.builder를 통해 ibatis에 대한 파일인 xml에서 에러가 났을 거라고 생각했습니다.
 

에러 원인 코드1

 

 오류 원인이자 위치인데 이유는 mybatis foreach문 문법을 까먹고 잘못 적었기 때문이었습니다..

foreach문 안에 collection이란 속성값은 자료구조를 말하는 게 아니라 앞에서 넘겨주는 파라미터 명 즉 변수 명입니다. 그런데 저는 파라미터의 형을 적었기 때문에 오류가 발생하는 것이었습니다..

 
때문에 foreach를 돌리고 싶은 파라미터의 명을 써주면 오류 해결입니다~

해결 방법

 
 
까먹지 않기 위해 mybatis foreach 문법도 정리해 보겠습니다.
 
예제

<select id="selectPostIn" resultType="domain.blog.Post">
	SELECT *
    FROM POST P
    <where>
    	<foreach collection="list" item="item" index="index" open="(" seperator="," close=")" nullable="true">
        	#{item}
        </foreach>
    </where>
</select>
collection 반복하기 위한 파라미터 를 입력해주면 된다.
Map이나 Array, List, Set 등과 같은 반복 가능한 객체만 가능하다.
item List의 경우 foreach 구문이 실행되면서 순차적으로 저장된 값이 담긴다.
Map의 경우 Value가 담긴다.
index List의 경우 index 번호가 담긴다.
Map의 경우 key가 담긴다.
open 해당 구문이 시작될 때 삽입되는 문자열로 위 예제에서는 구문이 시작될 때 ( 가 붙는다.
close 해당 구문이 종료될 때 삽입되는 문자열로 위 예제에서는 구문이 종료될 때 ) 가 붙는다.
seperator foreach 구문이 실행되면서 반복적으로 값 사이에 출력 될 문자열로 위 예제에서는 , 가 붙는다.
nullable 전달 받은 파라미터가 null인 경우 foreach 구문의 생략 여부를 결정하며 true의 경우 foreach를 생략한다. default는 false이다.

 

 


 


마이바티스 3의 동적 sql에 대한 설명이 공식 사이트에 있는데 한 번씩 보는 걸 추천합니다.