본문 바로가기

Issue

[Java][MyBatis] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 오류 해결

반응형

오류 현상


mybatis 테스트 코드 작성시 @MybatisTest 어노테이션을 붙였는거나 그 외에도

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 라고 에러가 날때.

해결 방법


아래의 순서에 맞춰 해결하면 된다. ^0^

 

  1. Mapper Interface와 mapping되는 xml파일에 오타가 있는 경우
    (예시) id와 Interface에 메소드명이 일치하지 않는 경우
  2. Build 파일이 갱신되지 않은 경우
  3. classpath에 경로가 잘못된 경우
  4. xml이 저장될 경로를 잘못 생성한 경우
  5. DataBase confiure 파일을 찾지 못하는 경우

1 )

대부분 이와 같은 에러가 발생하는데, 오타만 찾으면 금방 해결이 가능하다. 

 

2 )
build 폴더에 파일 내용들이 갱신되어 있는지 확인한다.

 

3 )

mapper xml에 작성된 classpath 경로가 연결하려는 DB 경로와 맞게 설정되어 있는지 확인한다.

 

4 )

 IntelliJ를 사용하는 경우에는 쉽게 인지를 못하는 경우가 많다.

 

예를 들어, 아래와 같이 interface package와 XML 파일이 있는 폴더 경로가 있다고 생각해보자.

 

interface package 경로 : com.spring.java.mapper 라는 package에 Mapper Interface가 있음

XML(Mapper) directory 경로 : com/spring/java/mapper

 

필자는 xml이 있어야할 경로(classpath)를 resources 하위에 설정하는 데,

이때 javaConfig의 @MapperScan 어노테이션이 xml directory에 접근한다. 이게 문제였다.

필자는 resources 밑에 package처럼 경로를 만들어도 당연히 package처럼 생성이 될 줄 알았는데 그렇지 않았다.

 

resources 밑에는 package를 생성하지 못하고 directory만 생성이 가능한데

이 directory를 생성할 때 com.spring.java.mapper라는 directory를 생성하면 그냥 "."을 포함한 폴더가 생성되는 것이다. 

 

그런데 @MapperScan은 "."을 포함한 폴더가 아니라 com/spring/java/mapper와 같은 경로에 폴더를 원하기 때문에 

Invalid bound statement (not found):와 같은 에러가 나는 것이다. 

 

즉, com폴더 밑에 spring 폴더 밑에 java 폴더 밑에.... 이런식으로 하나씩 만들어야 접근 가능한 폴더 경로가 생성 된다.

(= 폴더명을 “.”을 포함해서 생성하지 말자 !!)

 

5 ) 

mapper xml을 제대로 못 읽어와서 발생하는 현상으로,

@ImportAutoConfiguration 어노테이션으로 강제로 설정했던 configuration을 import해주면된다.

단, 강제로 지정하기 때문에 위 방법들이 모두 안되는 경우에 시도하도록 하자.

 

@ImportAutoConfiguration(DatabaseConfiguration.class)

 


[참고]

https://blog.woniper.net/247

 

[MyBatis] Invalid bound statement (not found): 에러

Invalid bound statement (not found): 에러가 발생하는 이유가 몇 가지 있는데 아무리 찾아봐도 내 문제는 해결되지 않았다. 에러 원인은 아래와 같다. Mapper Interface와 mapping되는 xml파일에 오타가 있는 경..

blog.woniper.net

 

https://berrrrr.github.io/programming/2019/09/07/mybatis-bind-fail/

 

MybatisTest 에서 bind 실패시 에러

@MybatisTest 에서 bind 실패시 mybatis 테스트코드 작성시 @MybatisTest 어노테이션을 붙였는데도 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 라고 뜨며 에러가 날때.

berrrrr.github.io

 

https://taccisum.github.io/instantiationexception_on_mybatistest.html

 

在@MybatisTest中使用通用Mapper出现InstantiationException的问题

问题描述在Spring Boot环境中使用@MybatisTest注解针对Mapper写单元测试的时候,由于同时引入了通用Mapper,在单元测试中调用通用Mapper的方法进行CRUD时会出现InstantiationException异常 org.mybatis.spring.MyBatis

taccisum.github.io

 

반응형

❥ CHATI Github