轻量级ORM而不是hibernate-健壮且灵活

轻量级ORM而不是hibernate-健壮且灵活,hibernate,jakarta-ee,orm,ibatis,ormlite,Hibernate,Jakarta Ee,Orm,Ibatis,Ormlite,我在谷歌上搜索了短语“轻量级ORM for j2ee”,并从其中一个结果中找到了这个页面。我的目标是找到一个比Hibernate更轻的ORM框架,并提供一些对我来说最重要的Hibernate特性,例如:自动表生成和延迟初始化,并且不给我在表、映射和集合方面的时间。同样重要的是,即将到来的ORM有一个围绕它的社区,它可以更快地找到错误和bug的解决方案。新的orm对我隐藏数据库也很重要(需要更少的sql技能,更多的OO)。 到目前为止,我已经将我的选择范围缩小到iBatis(myBatis)和OR

我在谷歌上搜索了短语“轻量级ORM for j2ee”,并从其中一个结果中找到了这个页面。我的目标是找到一个比Hibernate更轻的ORM框架,并提供一些对我来说最重要的Hibernate特性,例如:自动表生成和延迟初始化,并且不给我在表、映射和集合方面的时间。同样重要的是,即将到来的ORM有一个围绕它的社区,它可以更快地找到错误和bug的解决方案。新的orm对我隐藏数据库也很重要(需要更少的sql技能,更多的OO)。 到目前为止,我已经将我的选择范围缩小到iBatis(myBatis)和ORMLite。 我希望这个ORM用于我的新项目,它是j2ee中的一个桌面应用程序,因此这个ORM的启动时间要比其他ORM的启动时间短,这一点很重要(不像Hibernate,它在第一次运行时需要很多时间,特别是在有很多表的情况下)

thnx

mybatis怎么样:


它比hibernate轻,但仍然具有您想要的功能。它是一个成熟的框架(不久前它被称为ibatis,但现在已经存在多年)。Alfresco开发人员决定,对于他们的第四版Alfresco CMS,出于性能原因,他们将主要从hibernate切换到ibatis。

我担心您可能误解了这些概念。您基本上不是在寻找Hibernate的替代品,而是ORM的替代品

Hibernate是适当ORM的极少数尝试之一。Hibernate试图解决大多数对象/关系不匹配的范例。这些是:

  • 粒度问题
  • 亚型问题
  • 身份问题
  • 与协会有关的问题
  • 数据导航问题
有关更多信息,请参阅

总而言之,没有什么比这更轻的ORM了。有适当的ORM解决方案,也有其他解决方案,比如myBatis,它不将关系模型映射到对象模型,而是将SQL语句映射到对象和方法


别忘了,你不必使用所有的Hibernate特性。您可以轻松地将其与定制SQL、普通JDBC混合使用,并且只使用其功能的子集

edit1:关于慢速启动

Intermezzo:我目前正在使用一个专门为我们的应用程序调优的Propitary ORM解决方案(没有Hibernate tough那么智能)。最大的问题也是启动,这是因为将整个数据库映射到对象并不简单

现在,关于冬眠。也许您知道,Hibernate在启动时也会生成CRUDSQL语句。如果您有大型数据库,这可能会影响性能。但是,您可以关闭此启动SQL生成并切换 到运行时生成的动态语句

使用XML表示法,可以如下实现:

<class name="SomeClass"
    dynamic-insert="true"
    dynamic-update="true">
...
</class>
edit2:关于混合自定义SQL

参考书Java Persistence with Hibernate非常深入地解释了这一点。第8章是关于使用遗留数据库的,它还提供了如何更改DML(与自定义SQL一样,您甚至可以用自定义SQL替换CRUD代码!)和DDL(通用运行时DDL操作)的提示。你应该看看那里:)

我的目标是找到一个比Hibernate更轻的ORM框架,并提供一些对我来说最重要的Hibernate特性

我是作为Hibernate的轻量级替代品编写的,我不同意只有Hibernate才是“适当的ORM”的概念,唯一的替代方法是正确配置Hibernate或根本不使用ORM库。我们在工作中使用Hibernate,但当我在外部项目中使用它时,我发现它太重了。我有一个很大的安卓用户群,因为移动设备上的Hibernate是一个主要的过度使用

当然,hibernate比ORMLite有更多/更好的特性,但它也更胖,并且具有更多的依赖性。每个(也有很多)都有不同的功能集、依赖性、速度和总体成本/效益。每个开发项目都应该在附加到任何第三方解决方案(尤其是像ORM这样关键的解决方案)之前评估其需求


希望这有帮助。祝你好运。

如果你正在寻找一个轻量级的ORM,我推荐你。请注意,我的回答是有偏见的,因为我是项目的贡献者之一

我们决定编写轻量级替代方案的主要原因是(需要):

  • Hazzlefree配置
  • 清除事务定义
  • 内存管理和速度
  • 简单代码生成
简言之;快速发展

示例配置

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://localhost:5432/moria");
dataSource.setUsername("gandalf");
dataSource.setPassword("mellon");
Database.configure("moria", dataSource); // now there's a named database
示例映射查询

Goblin goblin = Record.findById(Goblin.class 42);
Goblin bolg = Record.find(Goblin.class, new Column("name", "Bolg"));
List<Goblin> goblins = Record.findAll(Goblin.class);

Mybatis不隐藏数据库,也不需要较少的SQL技能。不是说它不是一个好的框架,但它听起来并不像OP想要的那样。是的,正如我上面提到的,这是我的选择之一,但他们说它周围的社区还不够成熟!他们还说,它并不像hibernate那样隐藏数据库。我刚刚在网上读到这些。好吧,我不是说废话,但如果你选择了ORM,因为它隐藏了SQL,这样你就可以与它进行分钟到无交互,你的项目就不会有太大进展了。如果您想要一个更简单的持久性解决方案,它有一个类似Java OO的API,并且您不关心SQL,那么还有其他非SQL DB解决方案。一个不错的开源LDAP服务器,比如OpenLDAP,以及用于JavaODM的SpringLDAP(对象目录映射,正如Spring框架人们所说的那样),怎么样?或者一个nosql数据库。嗯,看起来不错,让我看看ldapTry openldap或ApacheDS,它们都是免费的好产品。也可以使用Apache Directory Studio(单机版或eclipse插件)作为LDAP浏览器。然后看看,它有一些很好的例子和很好的文档
Goblin goblin = Record.findById(Goblin.class 42);
Goblin bolg = Record.find(Goblin.class, new Column("name", "Bolg"));
List<Goblin> goblins = Record.findAll(Goblin.class);
Tribe tribe = new Tribe();
tribe.setId(1);
String name = "Azog";
Goblin azog = Record.select(
    Goblin.class,
    "SELECT * FROM goblins WHERE name = #1# AND tribe_id = #2:id#",
    name, // #1#
    tribe // #2#
);