Java開発者なら知っておきたい「O/Rマッピングツール」5選:ベンダーロックインや切り替えコストなどの注意点も
TechTargetは「O/Rマッピングツール」に関する記事を公開した。O/Rマッピングは、Javaからデータベースに接続するのによく使われる手法だ。O/Rマッピングにはさまざまなツールがあるため、どのツールを使用するかは慎重に比較検討する必要がある。
TechTargetは2024年6月14日(米国時間)、「O/Rマッピング(object relational mapping)のツール」に関する記事を公開した。O/Rマッピングは、オブジェクト指向のコードをリレーショナルデータベース(以下、RDB)に直接つなぐコードライブラリで、場合によっては「SQL」(Structured Query Language)の代わりになる。
O/Rマッピングの魅力は、開発者がSQLなどのデータベース言語を別途習得したり、厄介なデータベースを直接処理したりしなくても、Javaでプログラミングを続けられる点にある。専門家の中には「O/Rマッピングのツールは純粋なSQLに比べて制限があり、パフォーマンスの問題が生じる可能性があることから、必ずしも優れた選択肢ではない」と指摘する人もいるが、JavaのO/Rマッピングツールはデータベースとのやりとりを抽象化し、定型コードを削減するのに役立つ。
JavaでのO/Rマッピングの使用を選択する開発者には選択できるツールが幾つかあり、それぞれに注目すべき長所と短所がある。
JavaでRDBに接続する方法
JavaのRDBへの接続方法は、主に3つある。
1.Java Database Connectivity(JDBC)経由でSQLを使う
JDBCは実質的にはコードライブラリだ。開発者は、JDBCを使って接続文字列(データベースのURL)をユーザー名とパスワードを組み合わせてセッションオブジェクトを作成し、SQLクエリを直接データベースに送り、「ResultSet」などのコレクションを受け取る。
2.Web APIによる間接アクセス
Javaはサーバサイドで使われることが多いため、Web APIが使われることはあまりない。どちらかといえば、Web APIがデータベースに接続し、Web APIを介してサービスを提供するといった使い方が多い。Googleの「Android」を基盤とするアプリケーションの多くはJavaで記述され、Web APIを呼び出している。Javaで記述されたAPIの中には、APIゲートウェイパターンなど、他のAPIを呼び出すものもある。
3.Jakarta Persistence API(JPA)などによるオブジェクトを使う
JPAはO/Rマッピング用の標準インタフェースで、実装ではなく、O/Rマッピングの使用方法を表現するものだ。O/Rマッピングには標準的に動く仕組みが用意されているため、使いやすく、切り替えも難しくない。
JavaにおけるO/Rマッピングの利点
O/Rマッピング(特にJPAを実装するO/Rマッピング)では「POJO」(Plain Old Java Object)がよく使われる。POJOは、オブジェクトをデータベースに接続するための「アノテーション」と「構成」を備えている。つまり開発者は、SQLをよく知らなくても、データベースとの間に自動的なシリアライゼーションに似た機能を自由に組み込むことができるということだ。O/RマッピングはバックグラウンドでSQLを生成し直すため、場合によってはコミットタイミングも管理できる。
O/Rマッピングでデータベースの状態を管理すれば、データベースとのやりとりの回数を減らし、負荷を軽減してパフォーマンスを向上させることが可能だ。ジャストインタイムにデータを読み込む(必要なときに必要なデータを必要な量だけ読み込む)ことも、事前に大量のデータを読み込んでキャッシュとして利用することもできる。一方、O/Rマッピングの欠点はデータベースを細かく制御できないことだ。開発者は「制御が不十分」「デバッグが難しい」と感じることがあるだろう。
クエリを実行する場合、ほとんどのO/Rマッピングツールは、開発者が必要に応じてSQLを直接書いたり、ツール独自のクエリを利用したりできる。ただ、中にはSQLを全く使わないツールもある。オープンソースの「Hibernate」などのツールは、データベースに接続されており、データベース内の全てのエンティティをユーザー向けに作成できる。細かな設定も可能で、「テーブルを作成しない」「テーブルが存在しなければテーブルを作成する」「テーブルを追加する際にそのテーブルが存在する場合はエラーを返す」といったこともできる。
Java O/Rマッピングツールを5つ紹介
Javaに取り組む場合、開発者はさまざまなO/Rマッピングツールを利用できる。ツールにはそれぞれ、プロジェクトの要件に対応する独自の機能、利点、欠点がある。本稿では、Javaプロジェクトで活用できる、注目すべきO/Rマッピングツールを5つ紹介する。
なお、本稿のリストは、インターネットを調べ、専門家と話し合ったことに筆者の経験を重ねて作成している。筆者は、シリアル化のインタフェース標準のJPAから調べ始め、O/RマッピングとしてのJPA実装を探した。その結果、JPA実装のレファレンス標準として広く認められているHibernateにたどり着いた。Excelonでコンサルティングアドバイザーとして働くデビッド・ホッペ氏と筆者が話した際には、Hibernateが最も一般的に使用されるコンテキストである「Spring」につながった。
こうしたいきさつは全て筆者自身の経験とも一致している。インターネットを調べたところ、SpringとHibernate以外にも、さまざまな「最も人気のある」O/Rマッピングページや「最高の」O/Rマッピングページが見つかった。
本稿で紹介するツールは、これまでの評判、ドキュメントの公開状況、インターネット参照、確認できるコミュニティーサポート、一般的な議論、統合と提携を組み合わせて選定した。ツールはアルファベット順に紹介する。
EclipseLink
「EclipseLink」はJava IDE「Eclipse」と接続できることから適用できる範囲は広い。JRebelが公開した「2023 Java Developer Productivity Report」(2023年版Java開発者生産性レポート)では、Eclipseは2番目に人気が高いJava IDEに挙げられている。EclipseLinkはオープンソースのフレームワークで、XMLだけでなく、一部のレガシーデータベースや多くのNoSQLデータベースをサポートする。開発者はアノテーションを使ってオブジェクトをデータベースにマッピングできる。このマッピングは、「EclipseLink MOXy(Mapping Objects to XML)」コンポーネントを通じてXMLに保存できる。EclipseLinkは「SDO」(Service Data Objects)もサポートする。
Hibernate
Hibernateは、「Enterprise Java Beans」(EJB)の代替として2001年に誕生し、その後すぐにJava向けオープンソースO/Rマッピングツールのデファクトスタンダードになった。Hibernateはまだセッションの概念があり、セッションで状態を保持する。従って、開発者は「new()」を使って新しいオブジェクトを作成し、そのオブジェクトを構成して、「session.save()」を呼び出せば保存できる。作成したセッションでは「.getTransaction().commit()」を呼び出せる。
Hibernateには「遅延読み込み」と「一括読み込み」がある。どちらの方法で読み込むかはオブジェクトごとに構成できる。そのため、開発者はルックアップテーブルでは一括読み込みし、申請や注文などの大きなテーブルでは遅延読み込みをするといった使い分けができる。
ObjectDB
O/Rマッピングのパフォーマンスを比較するベンチマークはほとんどない。ただし、ObjectDB Softwareは独自のベンチマーク「JPA Performance Benchmark」(JPAB)を作成している。他のJPA実装は任意のデータベースでも機能するが、「ObjectDB」はツール独自のデータベース、つまり「組み込みバージョン」(アプリケーションユーザーに属する単一のユーザーデータベース)か「サーバベースバージョン」に結び付けられる。JPABによると、ObjectDBは他の競合ツールの5〜10倍という並外れたパフォーマンスを発揮している。JPBAには、マシンの正確なサイズ、OS、ディスク容量、メモリ、CPUの種類と速度など、全てのテストを説明する基本的なベンチマークページが用意されている。パフォーマンス結果は素晴らしいものだが、旧形式のデータベースからObjectDBへの変換や、データを保存できる特別なサイドプロジェクトが必要になる可能性がある。
Spring over Hibernate
「Spring」はオープンソースのフレームワークで、依存関係の注入(Dependency Injection)や「モデルビューコントローラー」(MVC)フレームワークなど、多くの機能をJavaに追加する。O/Rマッピングについては、Springは多くのデータアクセス手法を通じて複雑なトランザクションを管理する機能を追加する。つまり、レガシーアプリケーションは、JDBCとHibernateの両方で「Spring TransactionManager」を使用できるということだ。
重要なのは、「@transactional」アノテーションによって、開発者がコミット操作をJavaコードのように見せることができる点だ。Springは、POJOと「Java Beans」の両方をサポートしている。「Spring Boot」は、Springと同じオープンソースファミリーに属し、Webアプリケーション作成用のデフォルトテンプレートを追加する。
TopLink
Hibernateは「JPAとJava向けの主要オープンソースツールだ」といわれる。一方Java言語は、Sun Microsystems(2010年にOracleに吸収合併)が作成した言語だが、現在はOracleがトレードマークを保持している。OracleはJava仮想マシンを維持、サポートしている。「TopLink」はOracleによるJPA実装だ。
JPAはJDBC上で実行されるため、TopLinkは基本的にほとんどの最新リレーショナルデータベースをサポートしているといえる。TopLinkは、バックグラウンドでXMLをオブジェクトに変換し、その後オブジェクトに戻す機能をJPA標準全体にわたってサポートしている。これによって、複雑な構成ファイルの変更が、トランザクションのコンテキスト内でPOJOを操作するのと同じくらい容易になる。データベースのスコープが大きくなり過ぎたり、テーブル間に複雑な関係が多数存在したりすると、O/Rマッピングは問題に直面する傾向がある。XML構成なら、こうした問題を避けられることが多い。
Java O/Rマッピングツールの選び方
ベンダーロックインを避けるのであれば、HibernateとSpringが最適な選択肢になる可能性がある。
Toplink、EclipseLink、ObjectDBは、IBMの「WebSphere」、Oracleの「WebLogic Server」、Red Hatの「JBoss」などのJavaサーバテクノロジーと密接な関係がある。ベンダーとの結び付きを配慮するのであれば、これらのO/Rマッピングツールが最適な選択肢かもしれない。
これらのJavaサーバテクノロジーは今でも人気が高く、組織に深く根付いている。データベースをサーバからアプリケーションコードへと結び付けるには複雑なXML構成が必要になることが多い。最終的に結び付けられるアプリケーションサーバへの接続に最適なO/Rマッピングツールを慎重に検討すると同時に、切り替えのコストも考慮する必要がある。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Microsoft、ブラウザでAI推論が可能になる「WebNN」を解説 「次世代のWeb開発において重要な役割を果たす」
Microsoftは公式ブログで、Webアプリケーションでニューラルネットワーク推論タスクを効率的に実行できるJavaScript APIである「WebNN」の概要やアーキテクチャ、メリットなどを解説した。 - 「Rust」が初めて13位に上昇、「Python」は首位を独走 2024年7月版プログラミング言語人気ランキング
プログラミング言語の人気ランキング「TIOBEインデックス」の2024年7月版が公開された。Pythonが首位を独走する中、Rustが過去最高の13位を占めた。 - 2024年6月現在、本稼働環境のアプリで最も利用されているのは「Java 17」 New Relicがレポートを発表
New Relicは、年次レポート「2024年 Javaエコシステムの現状」を発表した。Java 21の提供開始後6カ月間での採用率は1.4%。JDKについては、コミュニティー管理型の「Eclipse Adoptium」が注目を集めているという。