这是一个相当开放性的问题。我将要开始一个新项目,并正在寻找与数据库访问集成的不同ORM。
你有任何喜欢的吗? 有哪些你建议避免使用?
这是一个相当开放性的问题。我将要开始一个新项目,并正在寻找与数据库访问集成的不同ORM。
你有任何喜欢的吗? 有哪些你建议避免使用?
我已经停止使用ORM。
原因不是概念上有任何缺陷。Hibernate运行良好。相反,我发现查询开销很低,可以将大量复杂逻辑嵌入到大型SQL查询中,并将许多处理过程转移到数据库中。
因此,考虑仅使用JDBC包。
没有,因为使用ORM会带走太多控制权,而带来的好处很小。尽管可以节省时间,但由于使用ORM导致的异常问题需要调试,这些节省的时间很容易就被消耗殆尽。此外,ORM还会阻碍开发者学习SQL以及关系型数据库的工作原理,而这些知识对他们非常有益。
还有许多其他好的ORM。特别是Hibernate或iBATIS拥有伟大的社区。但如果您正在寻找一个直观、简单的ORM,我会建议您尝试一下jOOQ。你会喜欢它! :-)
请查看此示例SQL:
// Select authors with books that are sold out
SELECT *
FROM T_AUTHOR a
WHERE EXISTS (SELECT 1
FROM T_BOOK
WHERE T_BOOK.STATUS = 'SOLD OUT'
AND T_BOOK.AUTHOR_ID = a.ID);
如何在jOOQ中表达:
// Alias the author table
TAuthor a = T_AUTHOR.as("a");
// Use the aliased table in the select statement
create.selectFrom(a)
.whereExists(create.selectOne()
.from(T_BOOK)
.where(T_BOOK.STATUS.equal(TBookStatus.SOLD_OUT)
.and(T_BOOK.AUTHOR_ID.equal(a.ID))))));
因此,考虑只使用JDBC包。我们真的想使用纯JDBC吗? - Vlad Mihalcea
Hibernate是Java中事实上的标准,是驱动JPA创建的推动力之一。它在Spring中得到了很好的支持,并且几乎每个Java框架都支持它。最后,GORM是一个非常酷的包装器,使用Groovy进行动态查找等操作。
甚至已经将其移植到.NET(NHibernate),因此您也可以在那里使用它。
Hibernate,因为:
以下是使用ORM的原因:
在编写一个中等规模的JavaSE应用程序时,我使用Avaje Ebean获得了非常好的体验。
它使用标准JPA注释来定义实体,但提供了一个更简单的API(没有EntityManager或任何附加/分离实体的干扰)。此外,当需要时,它还可以让你轻松地使用SQL查询或者普通的JDBC调用。
它还拥有非常好的流畅且类型安全的查询API。你可以编写如下代码:
List<Person> boys = Ebean.find(Person.class)
.where()
.eq("gender", "M")
.le("age", 18)
.orderBy("firstName")
.findList();
SimpleORM是一款直截了当且没有魔法的IT技术工具,它在Java代码中定义所有元数据结构,非常灵活。
SimpleORM通过将关系型数据库中的数据映射到内存中的Java对象来提供与Hibernate类似的功能。可以使用Java对象指定查询条件,对象标识符与数据库键保持一致,维护对象之间的关系,并自动将修改后的对象使用乐观锁刷新到数据库中。
但是,与Hibernate不同的是,SimpleORM使用非常简单的对象结构和架构,避免了复杂的解析、字节码处理等操作。SimpleORM体积小,透明度高,只有79K和52K两个大小为的JAR文件,而且只有一个小型可选依赖项(Slf4j)。 (Hibernate加上大约2000K的依赖Jars共计超过2400K。)这使得SimpleORM易于理解,大大降低了技术风险。
Eclipse Link,出于许多原因,特别是我感觉它比其他主流解决方案更少臃肿(至少不是那么显眼的臃肿)。
哦,而且Eclipse Link已经被选为JPA 2.0的参考实现。