[ORM][Java] JavaのORMをいくつか比較してみる

昼間のお仕事の関係でORMをいくつか触ったので、比較してみることにした。今更なーという感じはするけど、現時点で選ぶなら何なのだろうかと考える人の一助になれば。

※ 2012/09/18 改訂。Spring DATA JPAと QueryDslについては詳細をGistにあげたので、リンクを貼りました。

  • Java Persistence API (JPA)
    • JSR-317. 一応JavaEE6の標準になっているが、使いやすいわけではなく補助的に組み合わせて使うライブラリがいくつか存在するのでそれらについて後述。
    • 大まかに、クエリを書く方法は2通り
      • JPQL(SQLに似非の独自クエリ言語)を文字列で書く
        • 例: select o from Order o where o.date < '2012-09-01'
      • Criteria API(メタクラスを生成すればある程度は型安全だが、APIが使いにくい)で書く
        • クエリ言語として流れるように書けないため、表現力が低い
        • これを解決するのが後述するQueryDsl。Blog記事が参考になる。
  • Spring DATA JPA
    • Spring Frameworkの拡張ライブラリ(springframework-jdbcシリーズのようだが、安定したら本流に組み込まれるのかもしれない)
    • Gistに詳しく書いてみました。こちら
  • QueryDsl(JPA)
    • Open Sourceのライブラリ。クエリを型安全で流れるようなインタフェースなDSLで記述することができるライブラリで、JPAのCriteria APIに変換するDSLと、直接SQLに変換するDSLとがある。後者はQueryDsl(SQL)として後述。
    • 前者のJPAのCriteria APIに変換するDSLについては、QueryDslの Blog記事を参照のこと。コードを見てもらえば、これ以上特筆することはない。
    • ちなみに更新系のinsert, update, delete処理は、JPAのEntityManagerのAPIをそのまま使用する
  • QueryDsl(SQL)
    • QueryDSL(SQL)については Gistに詳しく書いてみました。こちら
  • Spring DATA JDBC Extension
    • Spring JDBCの拡張ライブラリ。上述の Spring DATA JPAともまた別モノ。
    • Spring JDBC本体の JdbcTemplate から QueryDslの型安全クエリを生成できるが、流れるように書けないという残念なAPI。
    • 上記QueryDsl(SQL)の説明Gistに一緒に書きました。

 

ここに挙げたライブラリの動作確認コードは、 githubに上げてます。

総合評価的なマトリクスは昼間のお仕事でそのような流れになったら作成する予定。いま選ぶとしたら個人的には QueryDsl(JPA)かなぁ。

それから、実行時性能を比較するためにベンチマークのテストを仕込んでいるところ。これについては後日書く予定。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中