由于各种原因,我一直在寻找 Hibernate 的替代方案。我遇到了 Liquibase,我喜欢这个想法,所以我愿意尝试。Liquibase 将以独立于 SQL 的方式满足数据库创建/修改的需要。我的主要问题是我的应用程序中的代码如何在不依赖数据库的情况下执行 SQL 语句?是否有其他项目类似于 Hibernates 方言类?
谢谢,
保罗
使用 SQL 的问题之一是它依赖于供应商。如果不使用一些第三方库或框架(如 Hibernate!),我认为没有任何方法可以解决这个问题。
但是,如果您确实使用 SQL,我强烈建议您看一下Ibatis。
我对此表示怀疑 - hibernate 中的方言用于将对象和 HQL 查询转换为适当的本机查询。
如果您想使用普通的 SQL 查询,那么您应该将 SQL 查询转换为.. SQL 查询。
实现数据库独立性的一种方法是仅使用 ANSI SQL。但即使这样也不能保证完全的数据库独立性。
我建议坚持使用休眠和 HQL (JPA-QL)
如果你想在正常的 liquibase 进程之外使用 liquibase 的 SQL 生成类,你可以。特别是在2.0中,对sql生成类进行了改进和抽象,但是根据您要运行的内容,可能无法满足您的需求。
由于 liquibase 是关于数据库迁移的,大多数独立于数据库的逻辑都围绕 DDL 语句(创建表/添加列等),而不是围绕插入/更新/删除语句。不知道您将运行哪种类型的语句,我假设您更关心跨数据库插入/更新/删除语句,在这种情况下,hibernate/ibatis/etc 将为您提供更好的服务。
我的主要问题是我的应用程序中的代码如何在不依赖数据库的情况下执行 SQL 语句?
好吧,真正实现这一点的唯一方法是使用比 SQL 更高级别的查询语言,该语言将被翻译成数据库特定的 SQL。我们已经有一些(专有的、标准的)DSL:Toplink QL、EJB-QL、JDO QL、HQL、JPQL 等。我的建议是选择你的毒药(但请不要推出你自己的解决方案)。