2

JavaでWebアプリを開発しています。Spring MVC の使用を考えています。しかし、ORM側では、私は決定を下す必要があります。Hibernate、iBatis、Spring JDBC Template などの ORM について勉強しました。

iBatis と Spring JDBC テンプレート (RowMapper を使用) はほぼ同じで、各クエリをオブジェクトにマップします。そのため、クエリごとにクラスを作成する必要があります。

Hibernate では、各テーブルをクラスにマップします。これにより、SQL を記述する必要が減ります。

SQL が苦手な場合は、Hibernate が望ましいと思います。私の場合、SQL に慣れているので、SQL を適切に制御できる iBatis または Spring JDBC テンプレートを使用したいと考えています。これらは Hibernate よりも複雑ではありません。

しかし、Hibernate は他の ORM が提供しないキャッシングを提供します。

だから私の質問:

  1. iBatis と Spring JDBC Template のどちらを使用しますか?
  2. Hibernate キャッシング (または私が知らないその他の Hibernate 機能) は非常に優れているので、他の ORM ではなく Hibernate を使用する必要がありますか?
4

3 に答える 3

6

SQLが苦手な場合は、Hibernateが望ましいと思います

SQL が苦手なため、Hibernate やその他の ORM を使用する必要があるという考えには同意しません。

Hibernate が SQL を生成するのは事実ですが、それが何をしているのかを理解していないことは、パフォーマンスの惨事のレシピです。

于 2012-06-02T16:49:09.453 に答える
2

Hibernate 開発者として、私は SQL もかなり得意です ;) 実際、私のキャリアの始まりは、リレーショナル (およびいくつかのプレリレーショナル) データベースだけを扱っていました。とにかく、手書きのSQLが「より保守しやすい」または「より良い制御」を与えるというこの誤解は本当にありません。しかし、その誤解を受け入れると、Hibernate に、すべてのエンティティに関連するすべての CRUD 操作に使用する SQL を実際に伝えることができます ( 、 などを参照@SQLInsert) @SQLUpdate

繰り返しますが、それはほとんど維持可能ではないことがわかりました。個人的には、Hibernate に INSERT/UPDATE/DELETE SQL を管理してもらいたいと思っています。一方、データのロードは、通常、もう少し制御が必要な状況です。しかし、Hibernate (および一般的な JPA プロバイダー) は、HQL/JPQL および Criteria クエリを介して、この種の制御を既に提供しています。私の意見では、Session.get に依存している場合は、単純にパフォーマンスの低下を求めているだけです。そして、それは O/RM の使用とは何の関係もありません。必要なデータの量 (同じエンティティに関連していても) はアプリケーションのユースケースによって異なるため、これは適切なデータ読み込み計画ではありません。たとえば、ドロップダウン リストの Employees を読み込むには、部門別の名簿を生成する場合とはかなり異なる量のデータが必要です。そして、それがコントロールです。

必ず、自分にとって最も快適で、アプリケーションの目標/要件を満たすものを使用してください。テクノロジーと製品の比較ポイントが事実であり、単なる誤解ではないことを確認してください。

キャッシングは、O/RM に関して公正なポイントです。実際、JPA (2.0 以降) には、ある程度のキャッシングが必要です。ただし、O/RM レベルでキャッシングするとパフォーマンスが低下することが多いことに注意してください。キャッシュしたい特定のデータのセマンティクスを本当に理解する必要があります。キャッシングに適したデータもあれば、そうでないデータもあります。また、多くの場合、O/RM レベルの「上」にキャッシュする方がはるかに優れています。

個人的には Hibernate を選択します。なぜなら、(1) SQL パワーへのアクセスを提供しながら抽象化の間で最良のバランスをとっていること (これは一般的に JPA プロバイダーに大きく当てはまります)、(2) あらゆる永続化の中で最も完全な機能セットを備えているからです。そこのプロバイダー。

于 2012-06-02T17:01:16.483 に答える
0

まあ、あなたの選択は、アプリケーションを開発しているものに依存する必要があります。Hibernate は上記の ORM の中でより強力であり、強力なコミュニティがあり、キャッシングは非常に強力です。しかし、非常に強力なキャッシングが問題になる場合があり、メモリを集中的に使用します。

myBatis ユーザーであり、これは中途半端であり、必要なものはすべて提供されていると考えています。まあ、myBatis は Spring JDBC テンプレートよりも私の個人的な選択です。

于 2012-06-02T16:58:38.710 に答える