3

「j2eeの軽量ORM」というフレーズをグーグルで検索し、このページを見つけましたhttp://java-source.net/open-source/persistence結果の1つから。私の目標は、Hibernate よりも軽量で、私にとって最も重要ないくつかの Hibernate 機能を提供する ORM フレームワークを見つけることです。コレクション。また、今後の ORM にはコミュニティがあり、エラーやバグの解決策をより迅速に見つけることができることも重要です。また、新しい orm がデータベースを私から隠していることも重要です (必要な SQL スキルが少なくなり、OO が増えます)。これまでのところ、選択肢を iBatis (myBatis) と ORMLite に絞りました。j2eeのデスクトップアプリケーションである新しいプロジェクトにこのORMが必要なので、このORMの起動時間を他のものよりも短くすることが重要です(Hibernateとは異なり、最初の実行に多くの時間がかかる場合は特に多くありますのテーブル)

thnx

4

4 に答える 4

13

私の目標は、Hibernate よりも軽量で、私にとって最も重要な Hibernate 機能のいくつかを提供する ORM フレームワークを見つけることです。

私はHibernate の軽量な代替品としてORMLiteを書きましたが、Hibernate だけが「適切な ORM」であり、Hibernate を正しく構成するか、ORM ライブラリをまったく使用しないことが他の唯一の選択肢であるという考えには同意しません。私たちは仕事で Hibernate を使用していますが、外部のプロジェクトで使用しようとすると、重すぎることがわかりました。モバイル デバイスでの Hibernate は非常にやり過ぎであるため、私には多くの Android ユーザー ベースがいます。

確かに hibernate は ORMLite よりも多く/より優れた機能を備えていますが、より太く、より多くの依存関係があります。さまざまな ORM ソリューション(多数あります)ごとに、機能セット、依存関係、速度、および全体的な費用対効果が異なります。各開発プロジェクトは、サードパーティのソリューション (特に ORM のような重要なもの) に接続するに、ニーズを評価する必要があります。

お役に立てれば。幸運を祈ります。

于 2011-09-12T12:33:38.677 に答える
8

概念を誤解されている可能性があります。基本的に、Hibernate に代わるものを探しているのではなく、ORM に代わるものを探しています。

Hibernate は、適切な ORMの数少ない試みの 1 つです。Hibernate は、オブジェクトとリレーショナルの不一致のほとんどのパラダイムを解決しようとします。それらは:

  • 粒度の問題
  • サブタイプの問題
  • アイデンティティの問題
  • 協会に関する問題
  • データナビゲーションの問題

詳細については、Hibernateを使用した Java の永続化を参照してください。

要約すると、軽い ORM などというものはありません。適切な ORM ソリューション、またはリレーショナル モデルをオブジェクト モデルにマッピングする代わりに、SQL ステートメントをオブジェクトとメソッドにマッピングする myBatis などの他のソリューションがあります。

忘れないでください - Hibernate のすべての機能を使用する必要はありません。カスタム SQL、プレーンな JDBC と非常に快適に組み合わせて、その機能のサブセットのみを使用できます。

edit1: 遅い起動について

Intermezzo : 私は現在、私たちのアプリケーション用に特別に調整された 1 つの独自の 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 と同様に、CRUD コードをカスタム SQL に置き換えることもできます!) および DDL (汎用ランタイム DDL 操作) を変更する方法のヒントも提供します。あなたはそこをのぞくべきです:)

于 2011-09-11T15:16:50.517 に答える
0

mybatis はどうですか: http://www.mybatis.org/

休止状態よりも軽量ですが、必要な機能も備えています。これは十分に確立されたフレームワークです (少し前は ibatis と呼ばれていましたが、現在は何年も存在しています)。Alfresco の開発者は、Alfresco CMS の第 4 バージョンでは、主にパフォーマンス上の理由から、休止状態から ibatis に切り替えることを決定しました。

于 2011-09-11T12:50:46.603 に答える
0

軽量の ORM を探しているなら、jORMをお勧めします。私はプロジェクトの貢献者の 1 人であるため、私の回答は偏っていることに注意してください。

軽量の代替案を作成することにした主な理由は次のとおりです (必要性):

  • 手間のかからない構成
  • トランザクション定義のクリア
  • メモリ管理と速度
  • シンプルなコード生成

要するに; 急速な発展。

構成例

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 に答える