Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何将一个接口中的方法绑定到不同的sqlsessrion_Spring Boot_Mybatis - Fatal编程技术网

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

Spring boot 如何将一个接口中的方法绑定到不同的sqlsessrion,spring-boot,mybatis,Spring Boot,Mybatis,在我的spring boot应用程序中,我需要连接到多个数据源(我知道这是一种反模式)。因此,我配置了不同的数据源和相应的SqlSessionFactorys。使用MapperScannerConfiguration,我可以指向不同的包。例如,将包com.dat.dao1中的接口绑定到SqlSessionFactory1,将包com.dat.dao2中的接口绑定到SqlSessionFactory2。我想知道是否有一种方法可以将这个绑定放在方法级别,这样我就可以决定哪个SqlSessionFac

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

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

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

  • MapperProxyFactory
    创建类而不是
    MapperProxy
  • MapperRegistry
    使用您的
    MapperProxyFactory
  • MapperScannerConfiguration
    使用您的
    MapperRegistry
  • 因为所有这些类都是硬编码的,不可配置

    因此,使用两个单独的
    MapperScannerConfigure
    扫描不同的包或配置了不同的
    annotationClass
    的包要容易得多