3

我用谷歌搜索了“j2ee 的轻量级 ORM”这个短语并找到了这个页面http://java-source.net/open-source/persistence从结果之一。我的目标是找到一个比 Hibernate 更轻量的 ORM 框架,并且还提供了一些对我来说最重要的 hibernate 特性,例如:自动生成表和延迟初始化,并且不要让我在表和地图方面遇到困难和收藏。同样重要的是,即将到来的 ORM 有一个围绕它的社区,它可以更快地找到错误和错误的解决方案。新的 orm 对我隐藏数据库也很重要(需要更少的 sql 技能和更多的 OO)。到目前为止,我已将选择范围缩小到 iBatis (myBatis) 和 ORMLite。我想要这个 ORM 用于我的新项目,它是 j2ee 中的一个桌面应用程序,所以这个 orm 的启动时间比其他的少是很重要的(不像 Hibernate,它第一次运行需要很多时间,特别是当你有很多表)

谢谢

4

4 回答 4

13

我的目标是找到一个比 Hibernate 更轻量的 ORM 框架,并且还提供了一些对我来说最重要的 hibernate 功能

我写ORMLite作为 Hibernate 的轻量级替代品,我不同意只有 Hibernate 是“正确的 ORM”的概念,唯一的其他选择是正确配置 Hibernate 或根本不使用 ORM 库。我们在工作中使用 Hibernate,但是当我在外部项目中使用它时发现它太重了。我有一个庞大的 Android 用户群,因为移动设备上的 Hibernate 实在是太过分了。

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

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

于 2011-09-12T12:33:38.677 回答
8

恐怕您可能误解了概念。您基本上不是在寻找 Hibernate 的替代品,而是寻找 ORM 的替代品。

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

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

有关更多信息,请参阅使用 Hibernate 的 Java 持久性。

综上所述,没有更轻量级的 ORM。要么有合适的 ORM 解决方案,要么有其他解决方案——比如 myBatis,其中不是将关系模型映射到对象模型,而是将 SQL 语句映射到对象和方法

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

edit1:关于慢启动

间奏曲:我目前正在使用一种专有的 ORM 解决方案(不像 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 Persistence with Hibernate 相当深入地解释了一些事情。第 8 章是关于使用遗留数据库的,它还提供了如何更改 DML 的提示(就像使用自定义 SQL,你甚至可以用自定义 SQL 替换 CRUD 代码!)和 DDL(通用运行时 DDL 操作)。你应该在那里偷看:)

于 2011-09-11T15:16:50.517 回答
0

mybatis 怎么样:http ://www.mybatis.org/

它比休眠更轻,但仍然具有您想要的功能。这是一个完善的框架(前一段时间它被称为 ibatis,但它已经存在多年了)。Alfresco 开发人员已经决定,对于他们的第 4 版 Alfresco CMS,他们将主要出于性能原因从休眠切换到 ibatis。

于 2011-09-11T12:50:46.603 回答
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#
);
于 2013-03-14T19:04:40.920 回答