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 还是其他? 的相关文章

  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 如何使用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 据我所知 我无法在运行时将类