Chapter 11 Spring + MyBatis
11.1 MyBatisとは
MyBatisは、SQLとJavaオブジェクトをマッピングするという思想で開発されたデータベースアクセス用のフレームワークです。
MyBatisは、SQLベースでデータベースアクセスを実現するというレガシーな手法を受け入れつつ、規模が大きめのアプリケーション開発で発生する課題を解決する仕組みを提供しています。MyBatisを使用することにより、以下のメリットを享受できます。
MyBatisの最大の特徴は、SQLを設定ファイルやアノテーションに宣言的に定義することで、Javaで書かれたビジネスロジックからSQL自体の存在を隠ぺいできる点です。Mapperインターフェイスと呼ばれるPOJOなインターフフェイスがSQLの隠ぺいを担っており、MyBatisがMapperインターフェイスのメソッドとSQLを紐付けています。そのため、Javaのビジネスロジックからは、Mapperインターフェイスを呼び出すだけで、紐付いているSQLを実行できます。
MyBatisでは、Mapperインターフェイスに紐付けるSQLを定義する方法として「マッピングファイル」と「アノテーション」の2種類がサポートされています。
11.1.1 MyBatisとSpringの連携
Spring上でMyBatisを使用する場合は、MyBatisプロジェクトから提供されているMyBatis-Springというライブラリを使用します。このライブラリを使用することで、MyBatisのコンポーネントをSpringのDIコンテナ上で管理できるようになります。また、MyBatis-Springを使用することで以下のようなメリットも得られます。
11.1.2 MyBatisとMyBatis-Springの主要コンポーネント
表11.2 MyBatisの主要コンポーネント
コンポーネント/設定ファイル | 説明 |
---|---|
MyBatis設定ファイル | MyBatisの動作設定を指定するXMLファイル |
Mapperインターフェイス | マッピングファイルやアノテーションに定義したSQLに対応するJavaのインターフェイス。MyBatisは、実行時にMapperインターフェイスの実装クラス(以降、Mapperオブジェクトと呼ぶ)をProxyとしてインスタンス化するため、開発者はMapperインターフェイスの実装クラスを作成する必要はない |
MyBatisとMyBatis-Springの仕組みの理解を深めるために、それらの主要コンポーネントがどのような流れでデータベースにアクセスしているのかを見てみましょう。
各コンポーネントがどのように作用しているのかを、以下の2つのフェーズに分けて順を追って説明します。
- アプリケーションの起動時に行うBean生成処理
- リクエストごとに行なうデータアクセス処理
■アプリケーションの起動時に行うBean生成処理
- SqlSessionFactoryBeanをBean定義することで、SpringのFactoryBeanの仕組みにより、SqlSessionFactoryBuilderを用いてSqlSessionFactoryがBeanとして生成される。この際、DIコンテナ上にBean化されたデータソースをインジェクションすることで、捜査対象のデータベースを指定できる
- SqlSessionFactoryBuilderは、MyBatis設定ファイルの定義に基づいてSqlSesssionFactoryを生成する。生成されたSqlSessionFactoryは、SpringのDIコンテナによって管理される
11.1.3 MyBatis-Springの例外ハンドリング
11.2 Spring + MyBatisのセットアップ
本節では、MyBatisをSpring上で使用するためのセットアップ方法を紹介します。