大家好,我是欧阳方超,微信公众号同名。
1 概述
在之前探讨 Invalid bound statement (not found) 错误的文章里,常见原因是 SQL 的 xml 文件未正确打入 jar 包。但此次遇到新状况,项目中未编写 xml 文件,仅在服务类中有简单的 this.list() 查询语句,调用接口时却依旧出现 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 错误。
2 错误根源剖析
使用 Mybatis-Plus 时,若自行创建 sqlSessionFactory 这个 bean,不能使用常规的 SqlSessionFactory。Mybatis-Plus 有其特定的 MybatisSqlSessionFactory,它能够代理常用的增删查改方法。在实际开发中,许多开发者习惯按照传统 Mybatis 配置方式创建 sqlSessionFactory,在 Mybatis-Plus 环境下就易引发此错误。
例如,传统 Mybatis 配置创建 sqlSessionFactory 可能如下:
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 其他配置...
return factoryBean.getObject();
}
而在 Mybatis-Plus 项目里,正确的创建方式应使用 MybatisSqlSessionFactory,示例如下:
@Bean
public MybatisSqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 其他配置...
return factoryBean.getObject();
}
3 总结与启示
在使用 Mybatis-Plus 开发过程中,必须留意这些容易被忽视的配置差异。不能单纯照搬以往 Mybatis 开发经验,而应深入领会 Mybatis-Plus 的独特之处与要求。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。