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

How to bind methods in one interface to differenct SqlSessrions

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

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

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

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

因为所有这些 class 都是硬编码的,不可配置。

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