Hibernate は、開発をはるかに容易にするツールです。(私自身の経験に基づいて) Hibernate のオーバーヘッドはそれほど大きくないと感じています。おそらく、独自の SQL 結果をオブジェクト マッピングに書き込むことになるでしょう。うまくいけば、Hibernate よりもわずかに速いかもしれません。でも:
- Hibernate はセッションで L1 キャッシュを行うため、DB からデータを取得したかどうかを覚えておく必要はありません。
- Hibernate のパフォーマンス チューニングは、JDBC よりもはるかに簡単です。ライブ アプリに Javamelody をプラグインし、最も遅い SQL を探してから、イージー ロードとレイジー ロードを試して処理を高速化します。SQL を書き直す必要も、マッピング コードに触れる必要もありません。いくつかの注釈を調整するだけです
- L2 キャッシングは非常に簡単です。DB キャッシングでうまくいく場合もありますが、それには限界があります。Hibernate では、リレーション キャッシュとクエリ キャッシュを有効にできます。DB がボトルネックであり、アプリケーションが複数のノードにデプロイされている場合、違いがわかります。分散キャッシュは、DB に何千回もアクセスするよりもはるかに高速です。
結論として、はい、Hibernate にはオーバーヘッドがありますが、私にとってチューニング機能は非常に重要であり、複雑なアプリケーションでプレーンな JDBC よりも Hibernate の方がパフォーマンスが向上する可能性があります (そしてその可能性が非常に高いです)。Hibernate と QueryDSL を使用した開発は、プレーンな JDBC よりもはるかに高速であると言う必要はありません。