在Ibatis中使用动态表名称很简单。只需使用如下表达式:
SELECt * FROM $tableName$
其中
tableName是参数类的属性。
如果不是不切实际的话(甚至是不可能的话),在Hibernate(或任何JPA提供程序)中使用动态表名是非常困难的。这个问题之前已经提出。
在Ibatis中使用动态数据源将需要您编写一些代码,但不需要那么多。基本上,Ibatis围绕a的概念工作
sqlMapClient,它具有数据源和可以运行的查询列表。只需
sqlMapClient为每个数据库创建一个数据库,每个数据库都有不同的数据源,并让它们包括所有相同的查询文件(在sql
map配置中)。
可以编写DAO,使其
sqlMapClients注入多个,并在运行时选择要使用的DAO 。这是您必须自己编写的部分,但是很简单。
这是基于在编译时知道数据库的前提。如果直到运行时才知道该数据库,则要难一些。仍然有可能,但是我不确定如果从运行时基本上在运行时交换数据源,Ibatis会如何反应
sqlMapClient。它可能会起作用,它可能会崩溃。您必须尝试一下才能看到。
Hibernate也可以按照相同的原理在这里工作:将多个持久性单元注入DAO,并在运行时使用正确的单元。使用Hibernate(或任何JPA提供程序)时,您必须当心以确保将托管对象存储在正确的持久性单元中。我很容易看到这实际上变成了一场噩梦。
一个普遍的评论:不建议沿着动态表名称或数据库的路径走,所以请真正考虑您在做什么以及为什么这样做,并问自己是否可以通过做出一些更好的设计选择来补救。



