2011-09-11 28 views
3

我使用了一句“轻量级ORM for j2ee”,并从其中一个结果中找到此页面http://java-source.net/open-source/persistence。我的目标是找到一个比Hibernate更轻的ORM框架,并且还提供了一些对我来说最重要的休眠功能,例如:自动生成表和生成懒惰初始化,并且不会给我表格和地图带来困难。采集。即将到来的ORM在其周围有一个社区也很重要,这使得它能够更快找到错误和错误的解决方案。而且新的orm隐藏我的数据库也很重要(需要更少的sql技能并且更多OO)。 到目前为止,我已经缩小了对iBatis(myBatis)和ORMLite的选择范围。 我希望这个ORM适用于我的新项目,它是j2ee中的桌面应用程序,所以重要的是这个orm的启动时间少于其他时间(与Hibernate不同,第一次运行需要很多时间,特别是当你有很多表)轻量级ORM而不是休眠 - 鲁棒性和敏捷性

日Thnx

+0

相关吨o问题:http:// stackoverflow。com/questions/5489799 /快速简单的学习和pojo友好orm为java,http://stackoverflow.com/questions/3491540/java-orm-for-a-read-only- DB和http://stackoverflow.com/questions/450864/lightweight-java-persistence – Gray

+0

最密切相关的http://stackoverflow.com/questions/296587/light-weight-alternative-to-hibernate – Gray

+0

日Thnx,我我已经读完了所有内容,但并没有记住我的想法,但到目前为止,我发现ibatis – MoienGK

回答

8

恐怕你可能误解了概念。你基本上不会寻找替代Hibernate,而是ORM的替代方案。

Hibernate是正确的ORM的极少数尝试之一。 Hibernate试图解决对象/关系不匹配范例的大部分。这些都是:

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

更多信息请参见Java Persistence with Hibernate

总之,没有轻量级的ORM。有适当的ORM解决方案或其他解决方案 - 比如myBatis,其中不是将关系模型映射到对象模型,而是将SQL语句映射到对象和方法

别忘了 - 你不必使用所有的Hibernate功能。您可以非常舒适地将其与自定义SQL,普通JDBC混合并仅使用其功能的子集。

EDIT1:关于启动慢的

间奏曲:我目前正在与一个propietary ORM解决方案的工作(而不是聪明的Hibernate韧)whitch是专门为我们的应用程序进行调整。最大的问题也是启动,这是因为将整个数据库映射到对象并不是微不足道的。

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

使用XML标记,可以实现这样的:

<class name="SomeClass" 
    dynamic-insert="true" 
    dynamic-update="true"> 
... 
</class> 

或者使用Hibernate注释:

@Entity 
@org.hibernate.annotations.Entity(
    dynamicInsert = true, dynamicUpdate = true 
) 
public class SomeClass { ... 

EDIT2:关于混合自定义SQL

的参考书籍的Java Hibernate的持久化解释事物的深度。第8章介绍如何使用遗留数据库,并提供如何更改DML(如使用自定义SQL,甚至可以用自定义SQL替换CRUD代码!)和DDL(通用运行时DDL操作)。你应该偷看:)

+0

我使用休眠了大约一年,我知道,Hibernate是一个ORM,但一些短期来就像是在启动时(在这种情况下,对我来说很重要),迫使我寻找一个替代缓慢对于HIBERNATE来说,恕我直言,休眠是工业用途的一个ORM,所以短语“替代休眠”并没有错。 – MoienGK

+0

“别忘了 - 你不必使用所有的Hibernate特性,你可以非常舒适地将它与自定义SQL,普通JDBC混合使用,并且只使用它的一部分功能。”我怎样才能做到这一点?你能给我一些启示吗? – MoienGK

+0

@戴夫我编辑的答案,看到有更多的信息 – Xorty

0

如何MyBatis的:http://www.mybatis.org/

这是轻于休眠状态,但仍然有你想要的功能。这是一个完善的框架(前一段时间它被称为ibatis,但它已存在多年)。 Alfresco的开发人员已经决定,他们的第四版Alfresco CMS主要是出于性能方面的考虑,他们将从休眠转换到ibatis。

+0

Mybatis不会隐藏数据库或需要较少的SQL技能。不是说这不是一个好的框架,但它听起来不像OP想要的那样。 –

+0

是的,这是我上面提到的一个选项,但他们说它周围的社区还不够成熟!并且他们还说它不像hibernate那样隐藏数据库。我刚刚在线阅读这些内容。 – MoienGK

+1

好吧,不要成为垃圾箱,但是如果你选择了一个ORM是因为它隐藏了SQL,这样你就可以毫不知情地与它交互,所以你不会在这个项目中得到很大的帮助。如果您想要一个更简单的持久性解决方案,并使用像API这样的Java OO,并且您不关心SQL,那么还有其他非SQL-DB解决方案。那么像开放ldap这样的开源LDAP服务器和Java ODM的Spring-LDAP(对​​象目录映射,就像Spring框架人们所称的那样)呢?或者一个nosql数据库。 –

9

直到我阅读@ Xorty的帖子时,我才会回答这个问题。我写了ORMLite作为Hibernate的轻量级替代品,我不同意只有Hibernate是“合适的ORM”的概念,唯一的另一种选择是正确配置Hibernate或根本不使用ORM库。我们在工作中使用Hibernate,但当我在外部项目中使用它时,发现它太重了。我有一个很大的Android用户群,因为移动设备上的Hibernate只是一个重大的矫枉过正。

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

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

+0

你在ormlite.org的开始页面没有提到什么是ormlite不是。值得一提的是,并不是所有的javax.persistence都支持,比如级联更新等。 – jontejj

0

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

主要的原因,我们决定写一个轻量级替代是(的需要):

  • 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); 

实施例定义查询

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# 
);