본문 바로가기
개발/기타

MyBatis Invalid bound statement (not found) 오류 조치

by 궁즉변 변즉통 통즉구 2024. 10. 18.
반응형

SpringBoot에서 MyBatis 설정 시 아래와 같은 에러가 발생하는 경우 확인 해야 할 항목 및 조치 방법에 대해서 정리해본다.

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

 

1. application 설정 파일 

application.yml 또는 application.properties 파일에 설정된 mapper xml 파일 경로가 올바르게 되어 있는지 확인한다. 아래 예시 설정을 참조하자.

mybatis.mapper-locations=classpath:/mappers/*.xml

 

2. Mapper인터페이스와 SQL ID

아래와 같이 Mapper 인터페이스 메소드명과 SQL 파일의 ID가 동일한지 확인한다. 

 

3. Java Config SqlSessionFactory 설정

Java Config로 SqlSessionFactory 빈을 설정하는 경우 setMapperLocations() 메소드의 xml 경로 설정이 올바르게 되어 있는지 확인한다.

@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);

    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    sessionFactory.setMapperLocations(resolver.getResources("classpath:/mappers/*.xml"));
    ...
 }

 

4. @MapperScan의 basePackages 경로 확인

@MapperScan 설정 시 basePackages 경로가 Mapper 인터페이스가 위치하는 경로까지 제대로 설정이 되어 있는지 확인한다. 예를들어, Mapper 인터페이스 파일들이 "com.sample.domain.mapper" 패키지 하위에 위치해 있는데 @MapperScan의 basePackages를 "com.sample.domain" 까지만 설정하면 안된다. 

@MapperScan(basePackages = {"com.sample.domain.mapper"})

 

만약, Mapper 인터페이스가 여러 패키지에 나눠져 있는 경우 아래와 같은 방법들을 참조해서 설정한다.

// 1. "**"를 활용한 설정
@MapperScan(basePackages = {"com.sample.**.mapper"})

// 2. 배열을 활용한 설정
@MapperScan({"com.sample.domain1.mapper","com.sample.domain2.mapper"})

 

주로 오타로 인해서 문제가 발생하는 경우가 많으니 오타가 있는 부분이 있는지 확인한다.

 

반응형

댓글