0

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

4

2 回答 2

0

如果您需要将几个实现相同接口的 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;
         }
      }
   }
}
于 2013-08-14T05:51:54.683 回答
0

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

--> 当您使用两个数据源时,您可以使用/创建两个 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

}
于 2013-08-14T05:55:01.373 回答