我们可以配置多个DAO的服务类..?

时间:2013-08-14 05:47:43

标签: spring spring-mvc mybatis

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

2 个答案:

答案 0 :(得分:0)

如果您需要将几个实现相同接口的bean注入您的服务 - 请检查this answer,它可能就是您要找的。简单的方法是:

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;
         }
      }
   }
}

答案 1 :(得分:0)

  

我遇到了这个特殊的问题,我需要从两个不同的数据源中获取数据。

- &GT;在使用两个数据源时,可以使用/创建两个SessionFactory。我不知道myBatis。你可以做的是创建BaseDao类,通过所有dao类扩展它。自动连接两个SessionFactoryDataSource。创建两个不同的getter方法以从两个Session工厂获取会话。您可以从所有Dao类访问两个SessionFactories。

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

}