【问题标题】:Light weight alternative to Hibernate? [closed]Hibernate 的轻量级替代品? [关闭]
【发布时间】:2010-09-22 17:36:42
【问题描述】:

我有一个单用户 java 程序,我想将数据存储在轻量级数据库中,例如 Derby 或 Sqlite。我想在我的程序中使用数据抽象层。 Hibernate 似乎需要大量配置,并且对于我需要的东西来说太过分了。 Hibernate 的轻量级替代品有哪些?

【问题讨论】:

标签: java database hibernate sqlite


【解决方案1】:

如果您使用注解,Hibernate 需要几乎为零的配置。它甚至可以自动发现类路径中的映射 bean!从简单性力量的角度来看,我没有看到任何替代方案。

它还可以将自己暴露为 JPA,这(恕我直言)更简单。

【讨论】:

  • 紧挨着零的不是零。
  • 还需要很多外部库尝试在android上使用它:P
  • 我试图找到一个更简单的 Hibernate 替代方案。在一个个人项目中,我使用了 MyBatis(多么糟糕的名字)。它比 Hibernate 做的工作要多得多。 Hibernate 确实节省了大量的 SQL 编码并有助于处理父子关系。我还查看了一些用于 Java 的 ActiveRecord 风格的 ORM。没有一个比 Hibernate 更成熟或更容易。所以,我要回到 Hibernate。
  • 问题不是关于替代品吗?
  • Hibernate 不是 Hiberernate 的轻量级替代品
【解决方案2】:

我的ORMLite 库就是这样一种选择。它支持 MySQL、Postgres、Microsoft SQL Server、H2、Derby、HSQLDB 和 Sqlite,并且可以很容易地扩展到其他人。它使用注解来配置类、良好的 Spring 支持、灵活的查询构建器等。

【讨论】:

  • OrmLite 看起来很有前途!但是这个项目还活着吗?一年多没有新版本,Github 上的拉取请求/问题没有答案。
  • 5.0 版于 2016 年 6 月发布。
  • 5.1 版于 2018 年 2 月 19 日发布。但根本无法与 Hibernate 相提并论,并且某些 JPA 注释实现无法正常工作。
  • “与休眠相当”?它们都是 ORM,但在其他方面却大不相同。在 JPA 实现方面,如果您发现 @M-Razavi,请填写错误报告。
【解决方案3】:

它仍然需要 XML 配置,但请查看MyBatis (formerly iBatis)

【讨论】:

  • iBatis 非常轻量级。您可以更轻松地定义和控制 SQL 到对象的映射。
  • ... 必须为 iBatis 投一票,但请注意,它不是 ORM 替代品,因为它不想与 Hibernate 等竞争。这是一种有点不同的动物,但在重量方面符合您的要求。
  • 现在剩下的是 MyBatis:mybatis.org
  • 我认为 i/MyBatis 中的 XML 实际上是一个优势,因为它以一种可以轻松复制到 SQL 控制台进行测试的格式保存复杂的查询。
【解决方案4】:

jOOQ 附带了一个流畅的 DSL,直接在 Java 中模拟 SQL 作为其主要目标的副作用:

  • 源代码生成
  • 完全支持标准 SQL,包括 SQL 语言功能,例如 UNION、嵌套 SELECT、所有类型的 JOIN、别名(例如,自连接)等
  • 广泛支持非标准 SQL,包括 UDT、存储过程、供应商特定函数等。

阅读本文了解jOOQ:http://java.dzone.com/announcements/simple-and-intuitive-approach,或直接访问网站:http://www.jooq.org

(免责声明,我在 jOOQ 背后的公司工作)

【讨论】:

  • jOOQ 摇滚!我们用它实现了一个大规模的 ETL 服务,非常高兴。我使用过 iBATIS,jOOQ 提供了低级 SQL 的所有相同优点,但没有大量 XML 和缺乏类型安全性。
  • 我忘了提到 jOOQ 的最佳特性之一:复杂和/或动态生成的查询可以以受控方式组装并由 Java 编译器验证,从而使您摆脱所有那些模棱两可的语法错误数据库抛出,并为您提供架构更改时的编译时回归覆盖。
  • JOOQ 非常棒,但显然它现在对 Oracle 和 Sybase 不是免费的,所以很多人都在避免使用这个框架并像 MyBatis 一样使用
  • @Makky:感谢您的反馈。我确实希望您牢记实际的价值主张,并且您不会仅仅基于一个免费而另一个不免费这一事实而切换到一个完全不同的框架。这将在您的软件中产生的维护和迁移成本令人望而却步,远远超出任何合理的商业许可......
【解决方案5】:

Apache Commons DBUtils 消除了 JDBC 编程中大量重复的繁琐工作。它需要很少的配置并且易于学习。它不是一个 ORM 框架(就像这里提到的 Hibernate 和其他框架那样),但它确实自动将 SELECT 列映射到 Java 成员字段以及其他重复的 JDBC 编程任务。它当然很轻。

【讨论】:

    【解决方案6】:

    你可以看看Ebean ORM。 - 没有会话 - 延迟加载有效 - 使用和学习更简单的 API。

    【讨论】:

    • 是否兼容SQLite和Android?
    • 已添加 SQLite 支持。我还没有在 Android 上尝试过。
    【解决方案7】:

    Cayenne 对我很有帮助。相对容易理解和启动和运行。我发现逆向工程部分特别迷人。可以使用 GUI 进行配置。

    【讨论】:

      【解决方案8】:

      我可以推荐 apache Empire-db。 http://incubator.apache.org/empire-db/

      Apache Empire-db 是一个开源的关系数据持久化组件,它允许数据库供应商独立的动态查询定义以及安全和简单的数据检索和更新。与大多数其他解决方案相比,例如在 Hibernate、TopLink、iBATIS 或 JPA 实现中,Empire-db 采用了截然不同的方法,特别关注编译时安全,减少冗余并提高开发人员的工作效率。

      一个例子:

      // Define the query
      DBCommand cmd = db.createCommand();
      DBColumnExpr EMPLOYEE_FULLNAME= db.EMPLOYEES.LASTNAME.append(", ")
                              .append(db.EMPLOYEES.FIRSTNAME).as("FULL_NAME");
      // Select required columns
      cmd.select(db.EMPLOYEES.EMPLOYEE_ID, EMPLOYEE_FULLNAME);
      cmd.select(db.EMPLOYEES.GENDER, db.EMPLOYEES.PHONE_NUMBER);
      cmd.select(db.DEPARTMENTS.NAME.as("DEPARTMENT"));
      cmd.select(db.DEPARTMENTS.BUSINESS_UNIT);
      // Set Joins
      cmd.join(db.EMPLOYEES.DEPARTMENT_ID, db.DEPARTMENTS.DEPARTMENT_ID);
      // Set contraints and order
      cmd.where(EMP.LASTNAME.length().isGreaterThan(0));
      cmd.orderBy(EMP.LASTNAME);;
      

      【讨论】:

        【解决方案9】:
        【解决方案10】:

        我参加聚会可能有点晚了,但我在 2010 年发布了ActiveJDBC,这是 ActiveRecord 模式的 ORM 实现,在依赖项上比 Hibernate 轻 10 倍以上,在运行时至少快两倍,并且需要零配置或注释。

        【讨论】:

          【解决方案11】:

          您可能想看看 prevayler(在 sourceforge 上)。一种更轻量级的持久性方法。或者您是否正在考虑针对数据库进行报告?

          【讨论】:

            【解决方案12】:

            如果不强制使用关系数据库,试试 db4o。

            【讨论】:

              【解决方案13】:

              我创建了sormula 作为重量级 ORM 的替代品。它支持 CRUD、POJO 友好、易于使用、配置和理解。零配置使用是可能的。 www.sormula.org

              【讨论】:

                【解决方案14】:

                Kiteframework 也是非常轻量级的 orm 框架。它以最少的配置提供几乎所有的数据库操作。

                http://deipakgarg.github.com/Kite-ORM/

                披露:我是这个项目的作者

                【讨论】:

                • 欢迎来到 Stack Overflow!感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
                • 它不在开发中,作者没有新的当前版本,最后一个预期版本是在 2012 年。
                猜你喜欢
                • 2023-01-06
                • 2011-07-17
                • 1970-01-01
                • 2010-09-10
                • 2014-04-23
                • 2011-07-18
                • 2013-08-01
                • 2010-12-21
                相关资源
                最近更新 更多