Hibernate、iBatis 还是其他?

2023-11-30

在我的项目中,我需要在运行时在数据库之间切换。我尝试使用 Hibernate,但陷入了一个需要将对象与数据库中的表映射的地方。问题是,我有几个带有前缀的表:documents2001、documents2002 ...据我所知,我无法在运行时将类与表映射。我尝试使用 iBatis,但问题在于运行时数据库发生变化。在 iBatis 中,这是很难做到的。\

也许有一些建议,我应该使用什么?

我的要求:

  • 能够在运行时连接到不同的数据库
  • 能够在运行时更改表(如果类映射到表,就像在 Hibernate 中一样)。

UPDATE:好的,我会尝试解释一下:
我必须编写应用程序,它可以在运行时连接到不同的数据库。应用程序的用户可以选择连接哪个数据库。所有数据库都具有相同的结构。除此之外,用户可以在数据库中的表之间切换。表具有相同的结构。

  • 为什么我假设,我不能使用 Hibernate:在 Hibernate 类中与表映射,所以我不能在运行时更改表。这不允许我选择可以连接的表。
  • 为什么我假设,我不能使用 iBATIS。在 iBATIS 中,在运行时连接到不同的数据库是非常困难的。因此,用户将无法在运行时连接到不同的数据库。

也许我可以使用另一个工具?


在 Ibatis 中使用动态表名非常简单。只需使用如下表达式:

SELECT * FROM $tableName$

where tableName是参数类的属性。

在 Hibernate(或任何 JPA 提供程序)中使用动态表名即使不是不切实际(甚至不可能)也是极其困难的。这个问题以前已经出现过。看JPA:运行时如何指定类对应的表名?.

在 Ibatis 中使用动态数据源需要您编写一些代码,但不需要编写那么多代码。基本上,Ibatis 围绕以下概念工作:sqlMapClient,它有一个数据源和一个可以运行的查询列表。只需创建一个sqlMapClient对于每个数据库,每个数据库都有不同的数据源,并让它们包含所有相同的查询文件(在 sql 映射配置中)。

可以将 DAO 编写为具有多个sqlMapClients注入并选择在运行时使用哪一个。这是您必须自己编写的部分,但它很简单。

这是基于在编译时了解数据库的情况。如果数据库直到运行时才知道,那就有点困难了。这可能仍然是可能的,但我不确定如果您基本上在运行时从 Ibatis 交换数据源,Ibatis 将如何反应sqlMapClient。它可能会起作用,也可能会爆炸。你必须尝试一下才能看到。

Hibernate 在这里也可能遵循相同的原理:将多个持久性单元注入到 DAO 中,并在运行时使用正确的单元。使用 Hibernate(或任何 JPA 提供程序),您必须注意确保托管对象存储在正确的持久性单元中。我可以很容易地看到这实际上变成了一场噩梦。

一条一般性评论:不建议走动态表名称或数据库的道路,因此请认真考虑您正在做什么以及为什么这样做,并问问自己是否可以通过做出一些更好的设计选择来弥补这一问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate、iBatis 还是其他? 的相关文章

随机推荐

  • 如何使用phpmyadmin将Excel文件导入mysql数据库

    我想通过 phpmyadmin 导入选项从 Excel 工作表格式 xls 导入到 mysql 数据库 据我所知 我们需要先将格式转换为csv格式 然后才能导入到phpmyadmin 但不幸的是 如果我更改为 csv 某些特殊字符或符号将变
  • 在固定不同 CPU 的 2 个线程之间传递一些变量的最佳方式

    我有一个问题需要了解是否有更好的解决方案 我编写了以下代码 将一些变量从编写器线程传递到读取器线程 这些线程固定到共享相同 L2 缓存的不同 CPU 禁用超线程 writer thread h struct a few vars uint3
  • 如何访问位图图像中的每个字节

    假设我有一个位图图像 是否可以迭代图像中的所有单个字节 如果是 怎么办 我找到了这个 http channel9 msdn com forums TechOff 108813 Bitmap to byte array 说你可以使用 Memo
  • 按对象属性对(对象)列表进行排序

    我正在努力实现一些已经给出答案的事情 但它在c 我对此一无所知c 所以我正在寻找 vb net 的替代品 我制造了一个class called BomItem它有几个属性 如数量 描述等 我添加这些BomItems into a List
  • 如何删除会话cookie?

    如何通过 jQuery 动态删除会话 cookie 而无需手动重新启动浏览器 我在某处读到会话 cookie 保留在浏览器内存中 并且在浏览器关闭时将被删除 sessionFooCookie is session cookie this c
  • @ManagedBean(name="foo") 在 EL #{foo} 中无法按其名称使用

    我试图在 JSF2 中使用应用程序范围的 bean 但由于某种原因它总是null在我的请求作用域 bean 中 这是我正在使用的代码 应用程序作用域 bean ManagedBean eager true name applicationT
  • 我使用 for 为数组分配一个值,但是当我打印数组时,它只使用整个数组中的最后一个值

    我使用大小为 8 8 的数组类创建了一个数组 并使用 fill 用虚拟对象填充它 之后我创建了一个 for 并分配了值 但是当我打印数组时 所有字段都有相同的值 var gridSize 8 const colorname Red Oran
  • Echarts如何在条形图上的特定条形之间添加垂直虚线?

    我正在使用 Echarts 并创建了一个条形图 我正在尝试添加两条垂直虚线来分隔Source3 and Source4和另一条垂直虚线以显示分离SourceSix and SourceSeven 我试过乱搞markLine到一个酒吧并添加一
  • R - 生成二进制向量的所有可能的成对组合

    我正在寻找一种智能方法来生成长度为 n 的两个向量的所有成对组合 其中只有一个值不为零 现在我正在做一些非常绝望的事情 循环遍历每个组合 n 这就是我所追求的 例如 n 3 1 2 3 1 1 0 0 2 0 1 0 1 1 0 0 2 0
  • ChartJS 3.0 中的generateLegend() 发生了什么?

    我的理解是3 0版本已经贬值了 是否有其他方法可以轻松完成图例的定制 是的 有一种非常简单的方法可以使用以下命令向 ChartJS 3 5 添加自定义图例plugins 下面是它如何工作的示例 创建 DOM 结构以支持新的图例和 Chart
  • 如何在Python中将日期时间转换为字符串?

    我想用这段代码制作折线图 df pd DataFrame from dict sentencess sentencess publishedAts publishedAts hasil sentimens hasil sentimens d
  • 将对 Laravel Controller 的请求路由到正在运行的 WebSocket 服务器

    情况 有一个长时间运行的任务需要异步启动 此任务的细节实际上并不是那么重要 基础知识是要配置多个虚拟机和复杂的网络设置 并且这是由将在不同服务器上运行的 python 脚本处理的 我们决定使用 WebSockets 在 Web 服务器和客户
  • 在Dispose(bool)方法实现中,不应该将成员设置为null吗?

    没有任何讨论的指南 注释 文章IDisposable模式建议应该将内部成员设置为null in the Dispose bool 方法 特别是如果它们是占用内存的野兽 在调试内部基准测试工具时 我开始意识到它的重要性 过去发生的情况是 有一
  • 验证 XSD 本身

    谁能告诉我如何验证 XSD 文件本身 不是针对 XSD 的 XML 我检查了许多论坛和网站 包括 SO 其中大多数都引用了某些或其他在线验证器 但这对我们来说不是一次性检查 我们的应用程序涉及使用 XSD 的 XSL 转换 因此我们需要确定
  • 检测两个数字相加时是否发生无符号整数溢出

    这是我的实现 用于检测尝试添加两个数字时是否发生无符号整数溢出 我的系统上 unsigned int UINT MAX 的最大值是 4294967295 int check addition overflow unsigned int a
  • 允许 VB.NET 应用程序将 Excel 文件转换为数据表

    我的 VB NET 应用程序目前允许我将 CSV 文件转换为数据表 这要归功于以下提供的代码David在这个问题中我发布了 上一个问题 现在我尝试允许将 XLSX 文件导入到数据表中 目前代码如下所示 Private Function Co
  • 在 PostgreSQL 中,关于 citext 性能的奇怪问题?

    In PostgreSQL 手册它说citext只是一个实现的模块TEXT调用的数据类型LOWER citext模块提供了不区分大小写的字符串类型 citext 本质上 它在比较值时在内部调用 lower 否则 它的行为几乎与文本完全相同
  • 如何在iOS中动态解析JSON

    我们使用了第三方服务 它提供了一个 JS 文件 js文件发起http请求 得到一个json 我们解析json 得到了我们想要的内容 但是json格式总是在变化 有没有办法解析 json 但不更新我们的应用程序 不断更改架构听起来非常愚蠢 但
  • 使用 IN 和 python 列表构建 SQL 查询字符串

    我建立了一个对熊猫感兴趣的价值观列表 table1 pd read csv logswithIPs csv cips data dash ip unique tolist print cips 10 111 111 111 111 123
  • Hibernate、iBatis 还是其他?

    在我的项目中 我需要在运行时在数据库之间切换 我尝试使用 Hibernate 但陷入了一个需要将对象与数据库中的表映射的地方 问题是 我有几个带有前缀的表 documents2001 documents2002 据我所知 我无法在运行时将类