开发组件模块时,如何利用项目中已经存在的mybatis?

背景

存在这种情况:
我们需要开发一个组件,这个组件需要使用到数据库。但组件本身不知道会被使用什么环境(不知道数据库),数据库环境是由引入该组件的项目应用来决定的!
已知,引入该组件的项目都采用mybatis框架来操作数据库

思路

直接使用该组件的宿主项目中存在的sqlSessionFactory对象来操作数据库

方法

  1. 引入mybatis 的maven依赖,略
  2. 使用spring生命周期勾子方法,在spring启动以后扫描本组件的需要使用的dao接口和xml配置
@Configuration
//spring扫描dao接口,并生成代理bean
@MapperScan("com.example.mapper")
public class AutoConfigureCamunda implements InitializingBean{
  
   private SqlSessionFactory sqlSessionFactory;
    @Autowired
    public AutoConfigureCamunda(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public void afterPropertiesSet(){
        org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
        String mapperXmlLocation = "mapper-camunda/ActGeCusFormMapper.xml";

        try (InputStream mapperStream = Resources.getResourceAsStream(mapperXmlLocation)) {
            XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperStream, configuration, mapperXmlLocation, configuration.getSqlFragments());
            xmlMapperBuilder.parse();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
  1. 增加自动扫描配置,创建META-INF/spring.factories文件,并添加内容
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.AutoConfigureCamunda

思考

这是我自己想到的一个方案,但可能不是最佳实践,欢迎同道讨论,或如果有老师知道更好的方案,希望可以告知,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容