当前使用版本(必填,否则不予处理)

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。或者留个接口,便捷方式,让自行调用么。

重现步骤(如果有就写完整)

  1. 创建ISqlInjector实现了类
  2. 使用Spring-boot的“spring.datasource.url”方式,测试ISqlInjector 可用
  3. 在代码中不使用Spring-boot的“spring.datasource.url”,自己在代码中创建“DataSource”、“SqlSessionFactory”。再测试ISqlInjector不可用。

报错信息

提示,自定义的sql方法,找不到 unknownException:Invalid bound statement (not found):

Comment From: miemieYaho

不支持,自己构建就抄MybatisPlusAutoConfiguration代码