如图: 出现Invalid bound statement (not found) 异常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yf.groupon.mapper.GroupRuleMapper.list
at com.baomidou.mybatisplus.core.override.PageMapperMethod$SqlCommand.<init>(PageMapperMethod.java:261)
at com.baomidou.mybatisplus.core.override.PageMapperMethod.<init>(PageMapperMethod.java:58)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.cachedMapperMethod(PageMapperProxy.java:70)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:63)
at com.sun.proxy.$Proxy72.list(Unknown Source)
at com.baomidou.mybatisplus.extension.service.IService.list(IService.java:279)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.invokeDefaultMethod(PageMapperProxy.java:89)
at
解决方案一: MapperScaner冲突和扫描路径
在启动类和配置类都进行类MapperScaner的声明
保留一个就可以了,配置俩冲突。
同时检查下括号里的扫描路径
@Configuration
@MapperScan("com.yf.groupon.mapper*")
public class MybatisConfigClass{
...
}
解决方案二:检查命名空间是否正常
解决方案三:在pom.xml文件build添加resources资源列表。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.yaml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.yaml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
解决方案四:检查配置文件中包扫描路径typeAliasesPackage是否正常?如果扫描不到,MP 无法进行预注入
解决方案五:导入依赖
请将mybatis-plus改成mybatis,mybatis,mybtis,重要的说三遍,
必要的架包如下
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
<version>2.0.1</version>
</dependency>
注意第一个是mybatis-spring-boot-start ,不是mybatis-plus-boot-starter
还要在mybatis配置文件里声明MybatisSqlSessionFactoryBean,
SqlSessionFactory不要使用原生的,请使用MybatisSqlSessionFactoryBean,
并设置扫描路径(覆盖配置文件中的mybatis-plus.mapper-locations)
@Bean
@Primary
public SqlSessionFactory userSqlSessionFactory(@Qualifier("tempDataSource") DataSource dataSource)
throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/**/*.xml"));
return bean.getObject();
}
解决方案六:还是导入依赖问题
<!-- mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
<version>2.0.1</version>
</dependency>
注意这里和方案五不同的是:没有mybatis-spring-boot-start ,而是mybatis-plus-boot-starter
因为该源码里都帮你配好了,有默认扫描路径,并声明使用MybatisSqlSessionFactoryBean
如果你的xml文件也是在resources下的mapper包里,那在配置文件中无需设置,注释掉,启动时会自动读取"classpath*:/mapper/**/*.xml" 下的xml文件
可如果你的xml文件不是在resources下的mapper包里,那你就参考方案四,自己setMapperLocations
最后总结下就是:
方案一二三必须检查,
五和六根据xml文件所在路径取其一
选了五或六,四可注释忽略