Hibernate的轻量级替代品?

Jar*_*red 111 java database sqlite hibernate

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

Vla*_*hev 142

如果使用注释,Hibernate需要零配置.它甚至可以在类路径中自动发现映射的bean!从简单性功率的角度来看,我没有看到任何替代方案.

它也可以将自己暴露为JPA,这是(恕我直言)甚至更简单.

  • 是关于替代的问题吗? (56认同)
  • 零旁边不是零. (32认同)
  • 它还需要很多外部库尝试在android:P上使用它 (12认同)
  • Hibernate不是Hiberernate的轻量级替代品 (8认同)
  • 我试图找到一个更简单的Hibernate替代品.在个人项目中,我使用了MyBatis(这个名字太糟糕了).这比Hibernate要多得多.Hibernate确实可以节省大量的SQL编码,并有助于父子关系.我还看了一些针对Java的ActiveRecord样式ORM.没有一个看起来成熟或比Hibernate更容易.所以,我要回到Hibernate了. (4认同)

Gra*_*ray 54

我的ORMLite库就是这样一种选择.它支持MySQL,Postgres的,微软的SQL Server,H2,德比,HSQLDB,和SQLite,并可以很容易地扩展到其他人.它使用注释来配置类,良好的Spring支持,灵活的查询构建器等.

  • 5.0版于2016年6月发布. (3认同)
  • OrmLite 看起来确实很有前途!但这个项目还活着吗?一年多没有新版本,Github 上的拉取请求/问题也没有得到答复。 (2认同)

kgi*_*kis 31

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

  • 我认为i/MyBatis中的XML实际上是一个优势,因为它以一种可以轻松复制到SQL控制台进行测试的格式保存复杂的查询. (3认同)

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

  • jOOQ摇滚!我们用它实现了大规模的ETL服务,并且不能更快乐.我使用过iBATIS,jOOQ提供了低级SQL的所有优点,没有大量的XML和缺乏类型安全性. (3认同)
  • 我忘了提及jOOQ的最佳功能之一:复杂和/或动态生成的查询可以以受控方式组装并由Java编译器验证,从而避免了数据库抛出的所有模糊语法错误,并提供编译时回归架构在您下面发生变化时的覆盖范围. (3认同)

Chr*_*ano 14

Apache Commons DBUtils从JDBC编程中获取了大量重复的gruntwork.它需要很少的配置,易于学习.它不是一个ORM框架(就像Hibernate和其他框架所提到的那样),但它确实自动将SELECT列映射到Java成员字段以及其他重复的JDBC编程任务.它确实很轻巧.


小智 12

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


Ben*_*ers 9

Cayenne对我有好处.相对容易理解并使其运行起来.我发现逆向工程部分特别迷人.可以使用GUI完成配置.


Som*_*tik 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);;
Run Code Online (Sandbox Code Playgroud)