BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析
作者:互联网
重构代码,方法抛出异常:BindingException: Invalid bound statement (not found)
提示信息很明显:mybatis没有提供某方法
先不解释问题原因和排查过程,因为使用SpringBoot集成Mybatis,主要配置点如下:
1、mapper xml文件的扫描
MyBatis 的真正强大在于它的映射语句,大部分情况下我们推荐使用映射器的 XML 文件。
因此要告诉SpringBoot扫描这些xml
配置文件指定扫描路径(推荐)
1 mybatis: 2 mapper-locations: classpath:mapping/*.xml #注意:一定要对应mapper映射xml文件的所在路径 3 type-aliases-package: com.winter.model # 注意:对应实体类的路径
配置 SqlSessionFactory
Mybatis万能的SqlSessionFactory接口(还有一个SqlSession接口,他俩是mybatis的核心),直接在他里面指定xml路径
@Autowired @Bean public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource, PageHelper pageHelper) throws IOException { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); /** 添加mapper 扫描路径 */ PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver(); String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "/sql/*.xml"; sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath)); /** 设置datasource */ sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setPlugins(new Interceptor[] { pageHelper }); return sqlSessionFactoryBean; }
2、mapper接口的扫描
接口上添加注解(推荐)
@Mapper public interface PermissionMapper { ... 略 ... }
指定扫描包路径
@MapperScan("com.XXX.XXX.services.mapper")
总之,SpringBoot中注意xml和mapper接口的扫描配置。
出现:BindingException: Invalid bound statement (not found) 这种异常,问题排查步骤:
1、先确认如上两个配置是否正常;
2、检查mapper文件,方法是否存在
3、检查xml文件,id=方法名 的sql是否存在,该xml对应的mapper接口是否存在
注意:
如果sql通过annotation注解写在mapper接口上,同时也使用了xml的方式,注意id不能重复,即使参数完全不同,id也必须不同(mybatis的xml里面可没有override的概念)
相同的id只能存在不同的namespace里面
标签:xml,mapper,sqlSessionFactoryBean,扫描,bound,Invalid,接口,BindingException,SpringBoot 来源: https://www.cnblogs.com/huahua035/p/10345382.html