ORM とは
ORM とは
ORM(Object-Relational Mapping)は、プログラミング言語のオブジェクトとリレーショナルデータベースのテーブルを自動的に対応づける(マッピングする)仕組みである。オブジェクト指向のプログラミング言語と RDB はデータの表現方法が異なるため、その差異(インピーダンスミスマッチ)を吸収する役割を果たす。
ORM を使うことで、開発者は SQL を直接書かずにデータベースの読み書きが行えるようになる。ただし、「SQL を書かなくてよい」度合いは ORM の種類によって異なる。
なぜ SIer で重要か
SIer の業務システム開発では、データベースアクセスはほぼ必須の処理である。すべての SQL を手書きすることも可能だが、ORM やそれに準ずるフレームワークを利用することで、以下のメリットが得られる。
- 生産性の向上 --- 定型的な CRUD 処理のコード量が減る
- 保守性の向上 --- SQL がコード中に散在せず、管理しやすい
- データベース移行の容易さ --- データベース固有の SQL を減らせる
SIer の現場ではプロジェクト開始時に ORM(またはそれに準ずるフレームワーク)が選定され、プロジェクト標準として全員がそれを使うことになるため、主要な選択肢を理解しておくことが重要である。
基本概念
インピーダンスミスマッチ
オブジェクト指向言語と RDB のデータ表現には根本的な違いがある。
| 観点 | オブジェクト指向 | RDB |
|---|---|---|
| データの単位 | オブジェクト(属性 + メソッド) | 行(カラムの集合) |
| 関連 | オブジェクト参照(has-a) | 外部キー |
| 継承 | クラスの継承 | 対応する概念がない |
| 識別 | オブジェクト ID | 主キー |
この差異を「インピーダンスミスマッチ」と呼び、ORM はこれを解消するための技術である。
ORM の 2 つのアプローチ
ORM には大きく分けて 2 つのアプローチがある。
フル ORM 型
テーブルとオブジェクトの対応を設定ファイルやアノテーションで定義し、SQL の生成をフレームワークに任せる方式。Java では JPA(Jakarta Persistence API) とその実装である Hibernate が代表的。
特徴: SQL を書かずにオブジェクト操作でデータベースアクセスが可能
利点: コード量が少ない、DB 製品に依存しにくい
欠点: 発行される SQL の制御が難しい、パフォーマンスチューニングが困難
SQL マッパー型
SQL は開発者が手書きし、SQL の結果とオブジェクトのマッピングをフレームワークが行う方式。Java では MyBatis が代表的。
特徴: SQL を自分で書き、結果のマッピングだけを自動化
利点: SQL を完全に制御できる、パフォーマンスチューニングしやすい
欠点: SQL を手書きするため、コード量がフル ORM より多い
JPA/Hibernate と MyBatis の比較
| 観点 | JPA/Hibernate(フル ORM) | MyBatis(SQL マッパー) |
|---|---|---|
| SQL の記述 | 自動生成(JPQL も使用可) | 開発者が手書き(XML またはアノテーション) |
| 学習コスト | 高い(キャッシュ、遅延ロード等の理解が必要) | 中程度(SQL が書ければ使える) |
| SQL の制御 | 難しい | 容易 |
| パフォーマンスチューニング | 難しい | 容易 |
| DB 移行の容易さ | 容易(SQL 自動生成のため) | やや手間(SQL の書き換えが必要) |
SIer での使われ方
SIer では MyBatis が多い理由
SIer の業務システム開発では、MyBatis(SQL マッパー型)が選ばれることが多い。その理由は主に以下の通りである。
- SQL のレビューが可能 --- SIer のプロジェクトでは SQL も設計書の一部としてレビュー対象となる。MyBatis なら XML ファイルに SQL が記述されているため、DBA(データベース管理者)やレビュアーが直接 SQL を確認できる。
- パフォーマンス要件への対応 --- 業務システムではバッチ処理や大量データの処理で SQL のパフォーマンスが厳しく求められる。MyBatis なら SQL を直接チューニングできる。
- 既存の SQL 資産の活用 --- システムリプレース案件では、旧システムの SQL を流用できることが MyBatis の利点となる。
- 学習コストの低さ --- SQL が書ける技術者であれば MyBatis を使えるため、大規模プロジェクトで人員を集めやすい。
TERASOLUNA での採用
NTT データの TERASOLUNA 開発ガイドラインでも MyBatis が推奨されており、多くの SIer プロジェクトがこのガイドラインに準拠している。TERASOLUNA + Spring + MyBatis の組み合わせは SIer の Java 開発における「黄金パターン」とも言える構成である。
JPA が使われるケース
SIer でも以下のケースでは JPA/Hibernate が選ばれることがある。
- 単純な CRUD が中心のシステム(管理画面など)
- Spring Boot + Spring Data JPA で素早くプロトタイプを作る場合
- 海外のチームと共同開発する場合(グローバルでは JPA が主流)
まとめ
- ORM はオブジェクトと RDB テーブルの対応づけを行う仕組みである
- フル ORM 型(JPA/Hibernate)と SQL マッパー型(MyBatis)の 2 つのアプローチがある
- SIer では SQL を直接制御できる MyBatis が多く採用されている
- SQL のレビュー可能性・パフォーマンスチューニング・学習コストが選定理由となっている
- TERASOLUNA ガイドラインでも MyBatis が推奨されている