mybatis-plus报错解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

问题报错

解决思路

  1. 检查是不是引入 jar 冲突
  2. 检查 Mapper.java 的扫描路径
    方法一:在 Configuration 类上使用注解 MapperScan
1
2
3
4
5
6
@Configuration
@MapperScan("com.yourpackage.*.mapper")
public class YourConfigClass{
...
}
12345

方法二:在Configuration类里面,配置MapperScannerConfigurer

1
2
3
4
5
6
7
8
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
//可以通过环境变量获取你的mapper路径,这样mapper扫描可以通过配置文件配置了
scannerConfigurer.setBasePackage("com.yourpackage.*.mapper");
return scannerConfigurer;
}
1234567
  1. 检查命名空间是否正常? 检查包扫描路径typeAliasesPackage是否正常?如果扫描不到,MP 无法进行预注入
  2. 检查是否指定了主键?如未指定,则会导致 selectById 相关 ID 无法操作,请用注解 @TableId 注解表 ID 主键。当然 @TableId 注解可以没有!但是你的主键必须叫 id(忽略大小写)
  3. SqlSessionFactory不要使用原生的,请使用MybatisSqlSessionFactory
    (61条消息) mybatis plus报Invalid bound statement (not found):解决_w的博客-CSDN博客

个人错误原因

经过排查是在配置类中使用了原生的SqlSessionFactory导致的

  1. 修改前配置类代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        @Bean(name = "ehrSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("ehrDataSource") DataSource clusterDataSource) throws Exception {

    final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(clusterDataSource);
    sessionFactory.setTypeAliasesPackage("com.spi.ehr.pojo");
    return sessionFactory.getObject();
    // MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    // mybatisSqlSessionFactoryBean.setDataSource(clusterDataSource);
    // mybatisSqlSessionFactoryBean.setTypeAliasesPackage("com.spi.ehr.pojo");
    // return mybatisSqlSessionFactoryBean.getObject();
    }

    项目中配置类是使用了原生的SQLSessionFactory,更改成MybatisSqlSessionFactory即可
  2. 修改后配置类
    1
    2
    3
    4
    5
    6
    7
    8
      @Bean(name = "ehrSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("ehrDataSource") DataSource clusterDataSource) throws Exception {
    MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    mybatisSqlSessionFactoryBean.setDataSource(clusterDataSource);
    mybatisSqlSessionFactoryBean.setTypeAliasesPackage("com.spi.ehr.pojo");
    return mybatisSqlSessionFactoryBean.getObject();
    }

    修改后运行正常