轻巧的替代Hibernate吗?[关闭]


113

我有一个用户Java程序,希望将数据存储在轻量级数据库(例如Derby或Sqlite)中。我想在程序中使用数据抽象层。Hibernate似乎需要大量配置,并且对于我所需要的东西来说过于矫kill过正。什么是Hibernate的轻巧替代品?


2
:你可以在这里查看与用法示例(和示例配置与Spring)沿替代github.com/bwajtr/java-persistence-frameworks-comparison
BřetislavWajtr

CMobileCom JPA是针对Java和Android的轻量级JPA实现。它的大小约为380K。它既轻便又快速。 cmobilecom.com
约翰(John John)

Answers:


142

如果您使用注释,则Hibernate要求零配置旁边。它甚至可以在类路径中自动发现映射的bean!从这两个简单性来看,我看不到任何替代方案功能的角度来看,。

它还可以将自己公开为JPA,这是(IMHO)甚至更简单的方法。


32
零附近不为零。
njzk2 2011年

12
也需要很多外部库尝试在android:P上使用它
sherif

4
我试图找到一种比Hibernate更简单的替代方法。在一个个人项目中,我使用了MyBatis(这个名字很糟糕)。比Hibernate要做的更多。Hibernate实际上节省了大量SQL编码,并有助于建立父子关系。我还研究了一些Java的ActiveRecord风格的ORM。没有比Hibernate更成熟或更容易的了。所以,我要回到休眠状态。
devdanke 2012年

56
问题不是关于替代品的吗?
卢卡斯格鲁纳

8
Hibernate不是Hiberernate的轻量级替代方案
cosbor11

55

我的ORMLite库就是这样一种选择。它支持MySQL,Postgres,Microsoft SQL Server,H2,Derby,HSQLDB和Sqlite,并且可以轻松扩展到其他应用程序。它使用注释来配置类,良好的Spring支持,灵活的查询生成器等。


OrmLite看起来很有前途!但是这个项目还活着吗?超过一年没有新版本,在Github上没有拉取请求/问题的答案。
斯特凡

3
5.0版于2016
。– Lauri Laanti

5.1版本已于2018年2月19日发布。但是根本无法与Hibernate相提并论,并且某些JPA注释实现无法正常工作。
拉扎维

“与休眠相比”?它们都是ORM,但在其他方面却大不相同。对于JPA实施,请在发现@ M-Razavi时填写错误报告。
灰色

31

它仍然需要XML配置,但请看一下MyBatis(以前的iBatis)


iBatis非常轻巧。您可以更轻松地定义和控制SQL到对象的映射。
柏林布朗

...必须对iBatis进行投票,但是请记住,它不是ORM的替代方案,因为它并不试图与Hibernate之类的产品竞争。这是一种与众不同的动物,但就体重而言,它可以满足您的需求。
矢量

1
现在剩下的是MyBatis:mybatis.org
Vladislav Rastrusny

3
我认为i / MyBatis中的XML实际上是一个优势,因为它以一种可以轻松复制到SQL控制台进行测试的格式保存复杂的查询。
彼得·提勒曼斯

22

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背后的公司工作)


3
jOOQ摇滚!我们使用它实现了大规模的ETL服务,再也不会高兴了。我使用过iBATIS,jOOQ具有低级SQL的所有相同优点,而没有大量的XML和类型安全性。
2012年

3
我忘了提到jOOQ的最佳功能之一:复杂和/或动态生成的查询可以以受控方式进行组装,并由Java编译器进行验证,从而使您免于数据库抛出的所有歧义语法错误,并提供了编译时回归架构更改时的覆盖率。
spieden 2012年

JOOQ很棒,但是显然它现在对Oracle和Sybase不免费了,因此很多人都在避免使用此框架,并且使用的是MyBatis
Makky,2014年

@Makky:感谢您的反馈。我确实希望您牢记实际的价值主张,并且不要仅仅因为一个是免费的而另一个不是免费的事实而切换到完全不同的框架。这将在您的软件中引起的维护和迁移成本令人望而却步,并且远远超出任何合理的商业许可……
Lukas Eder 2014年

15

Apache Commons DBUtils从JDBC编程中省去了很多重复的工作。它只需要很少的配置并且易于学习。它不是一个ORM框架(就像这里提到的Hibernate和其他框架那样),但是它可以自动将SELECT列映射到Java成员字段以及其他重复的JDBC编程任务。它肯定是轻量级的。


12

您可以看一下Ebean ORM。-无会话-延迟加载仅适用-使用和学习的API更加简单。


它与SQLite和Android兼容吗?
endryha 2010年

SQLite支持已添加。我还没有在Android上尝试过。
Rob Bygrave

9

卡宴对我很好。相对容易理解并启动和运行。我发现逆向工程部分特别吸引人。可以使用GUI进行配置。


6

我可以建议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);;


2

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


1

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




-2

Kiteframework还是很轻的orm框架。它以最少的配置提供几乎所有的数据库操作。

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

披露:我是该项目的作者


3
欢迎使用Stack Overflow!感谢您发布答案!请务必仔细阅读有关自我促销常见问题解答。另请注意,每次链接到您自己的站点/产品,都必须发布免责声明。
安德鲁·巴伯

2
它尚未开发,作者尚未发布新版本,最后预期发布是在2012
。– Barun 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.