org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 에러의 해결 방법에 대해서 알아본다.
기본적으로 Mapper 인터페이스와 XML에 오타가 있는지 확인해보자.
<select> 문 등에 선언하는 id에 오타가 있을 수도 있고, 선언되어 있는 id가 Mapper 인터페이스의 메서드명과 다른지 확인해보자. 인터페이스의 이름과 XML 파일에 선언된 이름이 달라서 생길 수도 있다.
아래와 같이 IDE에서 쉽게 발견하기 어려운 공백이 숨어있는 경우도 있다.
<!-- id에 공백이 있다. -->
<select id="select " resultTYpe="String">
...
</select>
쿼리가 작성되어 있는 mapper XML이 위치한 경로를 application.properties에 정의하지 않아서 또는 잘못 선언된 경우 발생할 수 있다. 정확한 경로는 프로젝트에 따라 변경해 주면 된다.
mybatis.mapper-locations:classpath:mapper/*.xml
Mapper의 이름이 같지만 패키지 이름이 달라서 인텔리제이나 이클립스에서 컴파일 오류가 발생하지 않는 경우다. 이런 경우 애플리케이션 구동 과정에서 오류가 발생하지 않으니 직접 확인해봐야 한다.
설정파일을 properties가 아닌 yaml 파일에 작성할 수도 있다. 계층 구조여서 가독성이 보다 더 좋은 장점을 갖는다. 다만 작성법에 익숙하지 않은 경우 들여 쓰기를 잘못 적용할 수 있다.
예를 들어, 최상단에 선언된 spring 하위에 위치하는 것이 아니라 최상단에 mybatis가 위치해야 한다. 설정 파일 내에서 잘못된 들여 쓰기로 다른 설정값이 정상적으로 읽히지 않을 수 있으므로 확인해보자.
DataSource를 설정하는 Configuration 클래스를 점검할 필요가 있다.
SessionFactory가 설정된 경우 setMapperLocations 메서드 등으로 Mapper XML의 위치를 선언할 텐데, 의도한 대로 잘 설정되어 있는지 확인해보자. @MapperScan이 선언된 경우에는 Mapper 인터페이스가 있는 위치와 일치한지 확인해보자.
출처 : https://madplay.github.io/post/mybatis-invalid-bound-statement-not-found-error
mybatis ORA-01745: 호스트/바인드 변수명이 부적합합니다 (0) | 2023.04.06 |
---|---|
[MyBatis] [Error] Cause: java.lang.IndexOutOfBoundsException (0) | 2023.04.06 |
MyBatis foreach를 이용한 배열 파라미터 삽입하기 (0) | 2021.04.06 |
Mybatis Like 검색 방법 (0) | 2021.03.23 |
mybatis if 에서 홑따옴표는 인식인되는 현상 (0) | 2019.04.30 |
댓글 영역