使用mybatis-plus出现的问题:
Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): mapper.mybatisPlus.TestMybatisPlus.selectList
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:227)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:49)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
at com.sun.proxy.$Proxy21.selectList(Unknown Source)
at serve.Demo.testService(Demo.java:38)
at Test.main(Test.java:18)
解决:
1.检查是不是引入 jar 冲突
2.检查 Mapper.java 的 扫描路径
xml文件方式:
<!-- 扫描所有的mapper接口的实现,让这些mapper能够自动注入;base-package:指定mapper接口的包名 -->
<mybatis-spring:scan base-package="mapper" />
注解方式一:在 Configuration 类上使用注解 MapperScan
@Configuration
@MapperScan(“com.yourpackage.*.mapper”)
public class YourConfigClass{
…
}
注解方式二:在Configuration类里面,配置MapperScannerConfigurer
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
//可以通过环境变量获取你的mapper路径,这样mapper扫描可以通过配置文件配置了
scannerConfigurer.setBasePackage("com.yourpackage.*.mapper");
return scannerConfigurer;
}
当然只要能扫描到,你也可以使用其它方式,如:@Mapper
3.检查是否指定了主键。如未指定,则会导致 selectById 相关 ID 无法操作,需注解 @TableId 注解表 ID 主键。当然 @TableId 注解可以没有!但是你的主键必须叫 id(忽略大小写)
4.SqlSessionFactory不要使用原生的,请使用MybatisSqlSessionFactory(这个就是我犯得错,之前测试 mybatis 的时候忘记 切换回来了)
下面两个要弄清除,不要弄混了
<!-- 创建SqlSessionFactory 对象 -->
<!-- <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--这个是Mybatis -->-->
<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 指定configLocation指定全局配置文件的位置 -->
<property name="configLocation" value="classpath:xml/mybatis/mybatis-config.xml" />
<!-- mapperLocations:指定mapper文件的位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
5.检查是否自定义了 SqlInjector,是否复写了getMethodList()方法,该方法里是否注入了你需要的方法(可参考DefaultSqlInjector)