Spring 我们是否可以配置一个具有多个DAO的服务类';s

Spring 我们是否可以配置一个具有多个DAO的服务类';s,spring,spring-mvc,mybatis,Spring,Spring Mvc,Mybatis,我遇到了一个特殊的问题,我需要从两个不同的数据源获取数据。我使用的是myBatis,根据他们的文档,一个sqlSessionFactory只能引用一个数据源,因为sqlSessionFactory被注入DAO中,所以具有多个源的DAO的想法是不可能的。我在考虑创建一个通用服务类,它将与多个DAO交互。?如果是,如何。。?如果没有,为什么不呢?如果您需要将实现同一接口的几个bean注入到您的服务检查中,那么它可能就是您正在寻找的。简单的办法是: interface DevService {

我遇到了一个特殊的问题,我需要从两个不同的数据源获取数据。我使用的是myBatis,根据他们的文档,一个sqlSessionFactory只能引用一个数据源,因为sqlSessionFactory被注入DAO中,所以具有多个源的DAO的想法是不可能的。我在考虑创建一个通用服务类,它将与多个DAO交互。?如果是,如何。。?如果没有,为什么不呢?

如果您需要将实现同一接口的几个bean注入到您的服务检查中,那么它可能就是您正在寻找的。简单的办法是:

interface DevService
{
   void add(Device d);
   String getName();
}

@Service("devServiceLocal")
class DevServiceLocalImpl implements DevService
{
   void add(Device d) {...}
   String getName() {return "local";}
}

class Controller
{
   @Autowired
   Collection<DevService> services;

   void doSomethingWithService()
   {
      // TODO: Check type somehow
      String servType = "local";
      for(DevService s: services)
      {
         if(servType.equals(s.getName())
         {
            // Call service methods
            break;
         }
      }
   }
}
接口开发服务
{
无效添加(设备d);
字符串getName();
}
@服务(“devServiceLocal”)
类DevServiceLocalImpl实现DevService
{
无效添加(设备d){…}
字符串getName(){返回“本地”;}
}
类控制器
{
@自动连线
收集服务;
void doSomethingWithService()
{
//TODO:以某种方式检查类型
字符串servType=“local”;
for(DevService s:services)
{
if(servType.equals(s.getName())
{
//呼叫服务方法
打破
}
}
}
}
我遇到了一个特殊的问题,我需要从两个不同的数据源获取数据

-->由于您使用两个数据源,您可以使用/创建两个SessionFactory。我不知道myBatis。您可以做的是创建
BaseDao
类,通过所有dao类扩展它。Autowire two
SessionFactory
DataSource
。创建两个不同的getter方法从两个会话工厂获取会话。您可以从所有Dao类访问两个SessionFactory

public class BaseDao {
    // Declare and autowire session factory 1 -> defined in configuration
    // Declare and autowire session factory 2 -> defined in configuration

    // getter method to get session from factory 1
    // getter method to get session from factory 2
}


public UserDaoImpl extends BaseDao implements UserDao {
    // here you can directly access sessions from factory 1 & 2 using getter methods in BaseDao

}

我们可以这样做吗?我的意思是我们可以将两个SessionFactory自动连接到一个DAO吗?然后我将如何为
BaseDAO
定义一个bean?我在DAOImpl中扩展了SqlSessionDaoSupport。应该删除它吗?让我重新表述一下。我还需要扩展
SqlSessionDaoSupport