【问题标题】:Java SQL database independenceJava SQL 数据库独立性
【发布时间】:2011-02-02 09:34:12
【问题描述】:

出于各种原因,我一直在寻找 Hibernate 的替代方案。我遇到了 Liquibase,我喜欢这个想法,所以我愿意尝试。 Liquibase 将以独立于 SQL 的方式满足数据库创建/修改的需要。我的主要问题是我的应用程序中的代码如何在不依赖数据库的情况下执行 SQL 语句?是否有其他项目类似于 Hibernates 方言类?

谢谢,

保罗

【问题讨论】:

  • 对不起,Liquibase 似乎是数据库的“版本控制”工具,而不是数据库访问库。所以你的问题有点没有意义。恕我直言。
  • 哪一部分没有意义?我说的是数据库独立性的解决方案,而 Liquibase 用于创建/修改或“版本控制”。
  • 稍后您将讨论您的应用程序和执行 SQL 语句(不是说“仅 DDL”)。加上比较 LB 和 Hib。这就是所有混乱增长的地方。

标签: java jdbc liquibase


【解决方案1】:

使用 SQL 的一个问题是它依赖于供应商。如果不使用一些第三方库或框架(比如 Hibernate!),我认为没有任何方法可以解决这个问题。

但如果您确实使用 SQL,我强烈建议您查看 Ibatis

【讨论】:

  • 我已经查看并使用了 ibatis。我看不出这对我的问题有什么帮助。我错过了什么吗?
【解决方案2】:

我对此表示怀疑 - hibernate 中的方言用于将对象和 HQL 查询转换为适当的本机查询。

如果您想使用普通的 SQL 查询,那么您应该将 SQL 查询转换为.. SQL 查询。

实现数据库独立性的一种方法是仅使用 ANSI SQL。但即使这样也不能保证完全的数据库独立性。

我建议坚持使用 hibernate 和 HQL (JPA-QL)

【讨论】:

  • 坚持使用 ANSI SQL 也意味着您可以做的事情非常有限,因为有许多事情超出了标准的范围。 (特别是如果只支持旧版本的规范。)
【解决方案3】:

如果你想在正常的 liquibase 进程之外使用 liquibase 的 SQL 生成类,你可以。特别是在2.0中,对sql生成类进行了改进和抽象,但是根据您要运行的内容,可能无法满足您的需求。

由于 liquibase 是关于数据库迁移的,大多数独立于数据库的逻辑都围绕 DDL 语句(创建表/添加列等),而不是围绕插入/更新/删除语句。不知道您将运行哪种类型的语句,我假设您更关心跨数据库插入/更新/删除语句,在这种情况下,hibernate/ibatis/etc 会更好地为您服务。

【讨论】:

    【解决方案4】:

    我的主要问题是我的应用程序中的代码如何在不依赖数据库的情况下执行 SQL 语句?

    嗯,真正实现这一点的唯一方法是使用比 SQL 更高级别的查询语言,该语言将被翻译成数据库特定的 SQL。我们已经有一些(专有的、标准的)DSL:Toplink QL、EJB-QL、JDO QL、HQL、JPQL 等。我的建议是选择你的毒药(但请不要推出你自己的解决方案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多