当前使用版本(必填,否则不予处理)
3.3.2 但是新版本也是一样
该问题是如何引起的?(确定最新版也有问题再提!!!)
我们的项目中,有自定义的ISqlInjector,原来是使用Spring-boot,properties配置,运行正常。后来改造成在代码中自创建“DataSource”、“SqlSessionFactory”之后。ISqlInjector 失效。
排查后发现是没有没有触发MybatisPlusAutoConfiguration中的代码
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
这段代码整体是copy,MybatisAutoConfiguration的,但是方法末尾,有一段注入了一系列自定义功能组件。
// TODO 此处必为非 NULL
GlobalConfig globalConfig = this.properties.getGlobalConfig();
// TODO 注入填充器
this.getBeanThen(MetaObjectHandler.class, globalConfig::setMetaObjectHandler);
// TODO 注入主键生成器
this.getBeanThen(IKeyGenerator.class, i -> globalConfig.getDbConfig().setKeyGenerator(i));
// TODO 注入sql注入器
this.getBeanThen(ISqlInjector.class, globalConfig::setSqlInjector);
// TODO 注入ID生成器
this.getBeanThen(IdentifierGenerator.class, globalConfig::setIdentifierGenerator);
// TODO 设置 GlobalConfig 到 MybatisSqlSessionFactoryBean
factory.setGlobalConfig(globalConfig);
return factory.getObject();
能把注入那一块,不绑定在MybatisPlusAutoConfiguration。或者留个接口,便捷方式,让自行调用么。
重现步骤(如果有就写完整)
- 创建ISqlInjector实现了类
- 使用Spring-boot的“spring.datasource.url”方式,测试ISqlInjector 可用
- 在代码中不使用Spring-boot的“spring.datasource.url”,自己在代码中创建“DataSource”、“SqlSessionFactory”。再测试ISqlInjector不可用。
报错信息
提示,自定义的sql方法,找不到
unknownException:Invalid bound statement (not found):
Comment From: miemieYaho
不支持,自己构建就抄MybatisPlusAutoConfiguration代码