org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ag.empbs.mapper.QuestionTagMapper.insert at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96) ~[mybatis-3.5.13.jar:3.5.13] at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_211] at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94) ~[mybatis-3.5.13.jar:3.5.13] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.13.jar:3.5.13] at com.sun.proxy.$Proxy152.insert(Unknown Source) ~[na:na] at com.ag.empbs.service.question.QuestionServiceImpl.add(QuestionServiceImpl.java:46) ~[classes/:na]
mybatisplus的insert方法报错
问题解决:
在使用 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 来创建 sqlSessionFactory。
@Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); String mapperLocations = env.getProperty("mybatis.mapperLocations"); String configLocation = env.getProperty("mybatis.configLocation"); typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); VFS.addImplClass(SpringBootVFS.class); // final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage(typeAliasesPackage); sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); return sessionFactory.getObject(); }