MyBatis情報
MyBatisとは
MyBatis(マイバティス)はJavaのアプリケーションとリレーショナルデータベースとのやりとりを簡略化する軽量なデータマッピングフレームワークです。
MyBatisはHibernateを始めとするJPA(Java Persistence API)実装と同等の機能を持ちますが、違いもあります。HibernateはORM(Object-Relational Mapping)フレームワークと呼ばれ、テーブル構造をJavaオブジェクトにマッピングし、SQLの記述を不要とします。
これに対し、MyBatisはSQLを記述することが前提のフレームワークであり、 SQLマッパーとも呼ばれます。これには最適化された既存のSQLがある場合にそのまま利用できるというメリットもあります。
Hibernateと比べるとMyBatisの機能は限定的ですが、習得が比較的容易であり、有力な選択肢の一つにあげられます。
MyBatisはJavaのメソッドとSQLやストアドプロシージャを関連付け、取得したデータをJavaオブジェクトにマッピングします。MyBatisの基本的な設定やSQLとJavaオブジェクトとのマッピングにはXMLまたはアノテーションを使用します。
MyBatisは2001年にスタートしたiBATISの後継プロジェクトで、2010年6月からMyBatisという名前に変更されて開発が続いています。
主な機能
主な機能は以下の通りです。
- データマッピング機能
XML(Mapper XML)やアノテーションを元にデータマッピングを行います
- 動的SQL
条件分岐による動的なSQLが実行可能です
- キャッシュ機能
カスタマイズ可能なトランザクション対応のクエリキャッシング機能が用意されています
- ロギング機能(※)
内部ログファクトリーを使用し、ログ出力が可能です
※別途、JDK logging、Apache Log4jなどのロギング実装が必要
その他、以下のようなツールも用意されています。
- スキーママイグレーション
- コードジェネレータ
- 各種フレームワーク連携(Spring Framework、Google Guice)
- マイグレーションMavenプラグイン
- Eclipseプラグイン
- Scala向けMyBatis
- MyBatis Dynamic SQL
Hibernateとの違い
HibernateがデータベースのテーブルとJavaオブジェクトを関連付けてSQLを隠蔽するのに対し、MyBatisでは指定されたSQLのクエリの結果をJavaオブジェクトに設定します。この点で両者のアーキテクチャは大きく異なります。
Hibernateの場合
SQLを意識せず、Javaオブジェクトはデータベースのテーブルと関連付けされます。
MyBatisの場合
SQLの結果のデータがJavaオブジェクトに設定されます。
※これらの図はあくまで簡略化されたものです。
ソースコードイメージ
以下はごく簡単な例です。
設定ファイル(mybatis-config.xml)に接続先データベースと使用するMapper XML(UserMapper.xml)を記述します。
Mapper XML(UserMapper.xml)にメソッド「selectUser」とSQLを設定します。
Javaソースから設定ファイル(mybatis-config.xml)を読み込み、定義された「selectUser」メソッドを使用してデータを取得します。
主な特徴
主な特徴は以下のとおりです。
|
機能 |
詳細 |
|---|---|
|
XMLまたはアノテーションを利用 |
JavaオブジェクトとSQLの関連付けはXML(Mapper XML)またはアノテーションを使って設定する |
|
開発効率が良い |
JDBCを扱うコードを書いたり、クエリ引数や取得結果を手動で設定したりする必要がなくなり、オブジェクトとデータを効率的にマッピングすることができるため、コーディングの量を削減することが可能 |
|
習得が容易 |
シンプルで他のデータマッピングフレームワークよりも簡易的に扱え、習得が容易 |
|
豊富なプラグイン |
統合開発環境Eclipseのプラグインなど開発者向けのプラグインも用意されている |
|
コスト効果 |
ライセンス費用がかからないため、商用製品に比べコストを削減することが可能 |
メリット・デメリット
メリット・必要性
- JDBCを直接操作する場合に比べ、オブジェクトへのマッピングなどの複雑な処理をMyBatisに任せることで開発効率がアップします
- SQLを直接記入できるため、処理を理解しやすくなり、既存の最適化されたSQLをそのまま利用することも可能です
- ユーザー入力値を「#{}」形式で設定することで適切にエスケープされSQLインジェクションのリスクを軽減できます
- SQLの知識があれば、比較的容易に習得可能です
デメリット・注意点・課題
- 大規模なプロジェクトの場合、管理すべきXMLの数が膨大になる場合があります
- データベースの種類に依存したSQLやストアドプロシージャも利用可能であるため、他のデータベースに変更する場合、修正作業が発生する可能性があります
- 習得が容易とはいえSQLの知識が必要です
導入事例
MyBatisは、軽量で扱いやすく、動作が安定しており、Javaプラットフォームを対象としているオープンソースのデータマッピングフレームワークとして、さまざまな業種・システムで幅広く利用されています。
類似プロダクト
その他データマッピングフレームワークとの機能比較は以下のとおりです。
|
MyBatis |
Hibernate |
Spring Data JPA |
|
|---|---|---|---|
|
分類 |
SQLマッパー |
ORM(JPA実装) |
JPAラッパー |
|
SQLの記述 |
必須。その分自由度は高い。 |
自動生成。※ただしHQLを使用すれば明示的に記述することも可能。 |
自動生成。※ただし@Queryを使用すれば明示的に記述することも可能。 |
|
開発効率 |
SQLを書く必要があるためやや劣る |
高い |
高い |
|
習得難易度 |
低い |
高い |
高い |
|
実行速度 |
速い |
やや遅い |
やや遅い |
MyBatisのライセンス
MyBatisのライセンスはApache 2.0です。
MyBatisのコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象Spring Framework
スプリングフレームワーク。Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。
-
サポート対象HikariCP
ヒカリシーピー。高速かつ軽量なJDBCコネクションプールのライブラリです。
-
サポート対象Hibernate
ハイバネート。Java のためのオブジェクト関係マッピング (ORM) ライブラリ

