如何将一个接口中的方法绑定到不同的SqlSessrions

时间:2018-10-09 07:16:58

标签: spring-boot mybatis

在我的Spring Boot应用程序中,我需要连接到多个数据源(我知道这是一种反模式)。因此,我配置了不同的数据源和相应的SqlSessionFactories。使用MapperScannerConfigurer,我可以指向不同的程序包。因此,例如,将包com.dat.dao1中的接口绑定到SqlSessionFactory1,并将com.dat.dao2中的接口绑定到SqlSessionFactory2。我想知道是否有方法在方法级别具有此绑定,以便可以确定哪个SqlSessionFactory支持哪个方法。有没有可供我选择SqlSessionFactory甚至SqlSession的注释?

1 个答案:

答案 0 :(得分:1)

mybatis中不支持此功能。如果要覆盖此行为,则需要更改MapperProxy的行为。您可以使其invoke方法对某些注释敏感,并使用适当的SqlSession

虽然这很简单,但是需要更多的精力来使mybatis使用您的实现。为了使用您的实现而不是现有的MapperProxy,您需要更改

  1. MapperProxyFactory创建类而不是MapperProxy
  2. MapperRegistry使用您MapperProxyFactory
  3. MapperScannerConfigurer使用您的MapperRegistry

因为所有这些类都是硬编码的并且是不可配置的。

因此,使用两个单独的MapperScannerConfigurer来扫描不同的软件包或配置了不同的annotationClass会容易得多。