轻量级ORM而不是休眠 - 健壮且敏捷

Moi*_*nGK 3 orm hibernate ibatis java-ee ormlite

我用谷歌搜索了"轻量级ORM for j2ee"这个短语,并从其中一个结果中找到了这个页面http://java-source.net/open-source/persistence.我的目标是找到一个比Hibernate更轻的ORM框架,并提供一些对我来说最重要的休眠功能,例如:自动表生成和延迟初始化,并且不会给我带来表和地图的困难.采集.同样重要的是,即将到来的ORM周围有一个社区,这使得找到错误和错误的解决方案变得更快.并且重要的是新的orm从我这里隐藏数据库(需要更少的sql技能并且更多OO).到目前为止,我已经缩小了对iBatis(myBatis)和ORMLite的选择范围.我希望这个ORM用于我的新项目,这是一个j2ee中的桌面应用程序,所以重要的是这个orm的启动时间要少于其他人(不像Hibernate,因为Hibernate需要花费很多时间才能第一次运行,特别是当你有很多表)

日Thnx

Gra*_*ray 11

在我阅读@ Xorty的帖子之前,我不打算回答这个问题.我写了ORMLite作为Hibernate的轻量级替代品,我不同意只有Hibernate是一个"正确的ORM"的概念,唯一的另一种选择是正确配置Hibernate或根本不使用ORM库.我们在工作中使用Hibernate,但是当我在外部项目中使用它时,我发现它太重了.我有一个很大的Android用户群,因为移动设备上的Hibernate只是一个重大的过度杀伤力.

当然,hibernate比ORMLite具有更多/更好的功能,但它也更胖,并且具有更多依赖性.每个不同的ORM解决方案(并且有很多)具有不同的功能集,依赖性,速度和总体成本/收益.每个开发项目都应该在结合任何第三方解决方案之前评估他们的需求- 尤其是与ORM一样关键的解决方案.

希望这可以帮助.祝你好运.


Xor*_*rty 8

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

Hibernate是正确ORM的极少数尝试之一.Hibernate试图解决大多数对象/关系不匹配的范例.那些是:

  • 粒度问题
  • 亚型问题
  • 身份问题
  • 与协会有关的问题
  • 数据导航问题

有关更多信息,请参阅Java Persistence with Hibernate.

总而言之,没有更轻的ORM这样的东西.有适当的ORM解决方案或其他解决方案 - 比如myBatis,而不是将关系模型映射到对象模型,而是将SQL语句映射到对象和方法.

不要忘记 - 您不必使用所有Hibernate功能.您可以非常轻松地将它与自定义SQL,纯JDBC以及仅使用其功能的子集混合使用.

edit1:关于慢启动

Intermezzo:我目前正在使用一个专有的ORM解决方案(不像Hibernate那样聪明),专门针对我们的应用进行了调整.最大的问题也是启动,因为将整个数据库映射到对象简直不是一件容易的事.

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

使用XML表示法,可以这样实现:

<class name="SomeClass"
    dynamic-insert="true"
    dynamic-update="true">
...
</class>
Run Code Online (Sandbox Code Playgroud)

或者使用Hibernate注释:

@Entity
@org.hibernate.annotations.Entity(
    dynamicInsert = true, dynamicUpdate = true
)
public class SomeClass { ...
Run Code Online (Sandbox Code Playgroud)

edit2:关于混合自定义SQL

引用的书籍Java Persistence with Hibernate对内容进行了深入的解释.第8章是关于使用遗留数据库的,它还提供了如何更改DML的提示(如使用自定义SQL,甚至可以用自定义SQL替换CRUD代码!)和DDL(通用运行时DDL操作).你应该偷看:)