Java生态系统提供了大量的ORM框架。 虽然ORM的大部分性能问题是由开发人员自己引起的,但ORM不值得只读使用。 在这里,建议使用可以使用PostgreSQL高级功能、代码量少的ORM。
为了选择最佳框架,对各主要框架的功能进行了测试。 我决定通过测试包含以下所有功能的可用ORM框架的Demo来选择最合适的框架。 (因为我选择的项目需要与Spring集成,所以能否与Spring良好集成是我重点考虑的要素之一。 )。 此Demo的所有功能包括基于JSON的排序和过滤、自定义复杂类型支持、使用枚举类型、数组类型、OUT参数的存储过程、查询未知时间点的记录创建或修改可能性、版本号支持有JSON支持,包括使用Spring Data Pageable类对所选记录进行分页和排序,以及对Java 8 time API类型的支持
几个主要的ORM框架测试
以下选定的大多数框架支持所需的功能,不支持的框架可以在代码中实现。 过时的框架或不包含上述功能的框架将被排除在此测试之外。
ActiveJDBC是活动记录模式的实现。 ActiveJDBC是一个轻量级、易于使用的ORM框架。 不幸的是,由于没有与Spring事务管理集成,必须编写和实现一些代码,但我相信在社区的帮助下,ActiveJDBC会发展得更好。
Apache Cayenne是一个易于使用的ORM框架,通过XML模型生成域对象(DO ),可以在称为建模器的捆绑的GUI APP系统中进行管理。 与ActiveJDBC一样,必须将自定义集成写入Spring事务管理(STA )。
Apache OpenJPA是由Apache组织提供的JPA实现。 JPA是Java EE5规格之一,是ORM规格。 Spring支持OpenJPA的轻量级集成,但比Hibernate更难集成。 因此,我认为在Spring中使用OpenJPA没有什么意义。 Hibernate使用cglib在运行时动态更改字节码以扩展实体,而openjpa在编译时扩展字节码。
数据访问平台是一个提供JPA、JDO和REST API实现的丰富框架。 对我来说,JPA是实现它最简单的方法。 此框架提供了一种映射,如Java 8时间API映射。 不幸的是,映射在本地查询调用中不可用,因此需要创建其他映射集。
Ebean实际上是play框架使用的灵活、轻量的ORM。 即使ORM不是由Spring提供,也可以轻松集成。 这个框架也用字节码进行了扩展。
EclipseLink是Eclipse的JPA实现。 虽然在Spring上有一些支持,但是像OpenJPA一样,意义不大。 为了能够使用用户定义的类型,还必须写mappers。
qxddx是可以在spring初始化页面上选择的三个主要框架之一。 这意味着可以很好地与Spring集成。 ORM不仅生成DO的代码,还生成用户定义的类型和存储过程的代码。 但是,将UDT与POJO或DAO插入方法结合使用时,还存在一些缺点,如未返回自动生成的主键值的问题。 另一方面,框架的作者Lukas Eder积极改善了这个框架。
MyBatis是spring初始化页面上提供的第三个ORM选项。 MyBatis是一个成熟的轻量级框架,与Spring很好地集成。 遗憾的是,由于重量轻,缺少本机支持PostgreSQL的高级功能,但可以解决这个问题。
在Spring Data JPA项目中,将Hibernate用作JPA的缺省实现。 因此,它与Spring完全集成。 此外,JDBC还封装了非常轻量级的对象,它与POJO建立了数据库表的映射关系,是一个完全自动化的ORM框架。
虽然定制代码允许ORM使用一些API来使用特性,但是许多工作都由开发人员完成。 定制器或部分支持意味着ORM将提供更高级的API。
的ORM框架排除
以下框架由于缺少对一个或多个所需特性的支持或其他问题而被排除在测试之外。 我不是对这些框架有什么负面看法,只是不符合我的需要。
Exposed是用JetBrains实现的Scala开发的ORM。 我想在Jav上用那个,但是真的很难。 那几乎是不可能的。 对Scala开发者来说,这可能是个好选择。
Reladomo是企业ORM,但不支持UDT和其他PostgreSQL高级功能。
速度门的当前稳定版本不支持事务处理。
似乎不再开发或维护以下框架:
ActiveJPA好像没有出现过稳定的版本,最终版是2014年。
Apache Torque的最终版是2013年。
Carbonado是一个非活动项目。
Hydrate的最终版本是2006年。
IBM查询的最终版本是2009年。
JDO Instruments连主页都没有。
JPOX的最终版是2013年。
ORMLite的最终版本是2013年。
QuickDB ORM仅在谷歌存档中可用,最终提交时间为2010年。
Speedo的最终版本是2005年。
TJDO项目的最终版本是2008年。
结语
经过测试,我最终决定在主项目中使用qxddx。 这可以很好地与Spring集成。 当然,也有一些缺点。 其他开发者也可以根据需求寻找不同的框架。
飞艇稳赚不赔的打法将Hibernate用作JPA的缺省实现。 因此,它与Spring完全集成。 此外,JDBC还封装了非常轻量级的对象,它与POJO建立了数据库表的映射关系,是一个完全自动化的ORM框架。
虽然定制代码允许ORM使用一些API来使用特性,但是许多工作都由开发人员完成。 定制器或部分支持意味着ORM将提供更高级的API。
的ORM框架排除
以下框架由于缺少对一个或多个所需特性的支持或其他问题而被排除在测试之外。 我不是对这些框架有什么负面看法,只是不符合我的需要。
Exposed是用JetBrains实现的Scala开发的ORM。 我想在Jav上用那个,但是真的很难。 那几乎是不可能的。 对Scala开发者来说,这可能是个好选择。
Reladomo是企业ORM,但不支持UDT和其他PostgreSQL高级功能。
速度门的当前稳定版本不支持事务处理。
似乎不再开发或维护以下框架:
ActiveJPA好像没有出现过稳定的版本,最终版是2014年。
Apache Torque的最终版是2013年。
Carbonado是一个非活动项目。
Hydrate的最终版本是2006年。
IBM查询的最终版本是2009年。
JDO Instruments连主页都没有。
JPOX的最终版是2013年。
ORMLite的最终版本是2013年。
QuickDB ORM仅在谷歌存档中可用,最终提交时间为2010年。
Speedo的最终版本是2005年。
TJDO项目的最终版本是2008年。
结语
经过测试,我最终决定在主项目中使用qxddx。 这可以很好地与Spring集成。 当然,也有一些缺点。 其他开发者也可以根据需求寻找不同的框架。