我遇到了这个特殊的问题,我需要从两个不同的数据源中获取数据。我正在使用 myBatis,根据他们的文档,一个 sqlSessionFactory 只能引用一个数据源,并且由于 sqlSessionFactory 被注入到 DAO 中,因此具有多个源的 DAO 的想法是不可能的。我正在考虑创建一个可以与多个 DAO 交互的通用服务类。这可能吗?如果是,如何..?如果没有,为什么不..?
问问题
1277 次
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 类扩展它。自动接线两个SessionFactory
和DataSource
。创建两个不同的 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 回答