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

xiaoxiao2021-02-28  12

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx.xxx.xxx.service.ReDemoService.selectByPrimaryKey

spring boot 2.0 做 mybatis 多数据源配置出了以上错误:

网上给出3种解决方案:

1.xxxMapper.xml 中namespace和接口不一致导致.

2.MapperLocations没有扫描到xml文件.

3.idea的坑,pom.xml配置resource将xml文件打包的时候加入到类路径下

可是~... 3种都试了.都不能解决bug.最后发现一个问题

ReDemoService.selectByPrimaryKey() .service接口怎么被mybatis注册为映射接口了

针对如图目录结构. 所以在整合扫包的时候要强制限定扫描规则

java bean 配置方式

@Configuration @MapperScan(basePackages = "com.mm2s",annotationClass = Mapper.class) // 需要在接口上加上Mapper注解 //@MapperScan(basePackages = "**.mapper") public class MybatisReConfig { @Primary @Bean("reDataSource") @ConfigurationProperties(prefix = "spring.datasource.h2-re") public DataSource reDataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public SqlSessionFactory reSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(reDataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources("classpath:mybatis/ReMappings/**/*Mapper.xml")); factoryBean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis-config.xml")); return factoryBean.getObject(); } @Bean @Primary public SqlSessionTemplate reSqlSessionTemplate() throws Exception { return new SqlSessionTemplate(reSqlSessionFactory()); } }

xml 配置方式

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:mapperLocations="classpath:mybatis/mappers/*.xml"> </bean> <!-- 扫描项目包下含有Mapper注解的类作为mybatis的映射接口--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.mm2s" p:annotationClass="org.apache.ibatis.annotations.Mapper" p:sqlSessionFactoryBeanName="sqlSessionFactory"/> <!-- 扫描名为mapper包下的类作为mybatis的映射接口 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="**.mapper" p:sqlSessionFactoryBeanName="sqlSessionFactory"/> -->

解决方法4: 

   @MapperScan中加入扫包限定annotationClass = Mapper.class  在xxxMappr加入@Mapper

   @MapperScan扫描包名为mapper下的类 basePackages = "**.mapper"

转载请注明原文地址: https://www.6miu.com/read-2602672.html

最新回复(0)