如何将一个接口中的方法绑定到不同的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
,您需要更改
MapperProxyFactory
创建您的 class 而不是 MapperProxy
MapperRegistry
使用你MapperProxyFactory
- 和
MapperScannerConfigurer
使用你的MapperRegistry
因为所有这些 class 都是硬编码的,不可配置。
因此使用两个单独的 MapperScannerConfigurer
扫描不同的包或配置不同的 annotationClass
会容易得多。
在我的 spring 引导应用程序中,我需要连接到多个数据源(我知道这是一种反模式)。所以我配置了不同的数据源和相应的 SqlSessionFactories。使用 MapperScannerConfigurer 我可以指向不同的包。因此,例如,将包 com.dat.dao1 中的接口绑定到 SqlSessionFactory1,将 com.dat.dao2 中的接口绑定到 SqlSessionFactory2。我想知道是否有办法在方法级别进行此绑定,以便我可以决定哪个方法由哪个 SqlSessionFactory 支持。是否有注释可供我选择 SqlSessionFactory 甚至 SqlSession?
mybatis 不支持开箱即用。如果您想覆盖此行为,您需要更改 MapperProxy 的行为方式。您可以使其 invoke
方法对某些注释敏感并使用适当的 SqlSession
。
虽然这很简单,但要让 mybatis 使用您的实现还需要更多的努力。为了使用您的实现而不是现有的 MapperProxy
,您需要更改
MapperProxyFactory
创建您的 class 而不是MapperProxy
MapperRegistry
使用你MapperProxyFactory
- 和
MapperScannerConfigurer
使用你的MapperRegistry
因为所有这些 class 都是硬编码的,不可配置。
因此使用两个单独的 MapperScannerConfigurer
扫描不同的包或配置不同的 annotationClass
会容易得多。