yagibrary

あだ名のやぎと図書館のlibraryを組み合わせてyagibraryです。本から学んだことをみなさんに紹介します。

【読書メモ】【Spring徹底入門】第11章 Spring + MyBatis その1

Chapter 11 Spring + MyBatis

11.1 MyBatisとは

MyBatisは、SQLJavaオブジェクトをマッピングするという思想で開発されたデータベースアクセス用のフレームワークです。

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を使用することで以下のようなメリットも得られます。

  • Springのトランザクション制御を利用するため、MyBatisのAPIに依存したトランザクション制御を行う必要がない
  • MyBatisの初期化処理をMyBatis-Springが行なうため、基本的にはMyBatisのAPIを直接使用する必要がない
  • MyBatisやJDBCの中で発生した例外がSpringが提供するデータアクセス例外に変換されるため、MyBatisやJDBCAPIに依存した例外ハンドリングを行う必要がない
  • スレッドセーフなMapperオブジェクトを生成できるため、Mapperオブジェクトを他のBeanにDIして使用できる
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生成処理

  1. SqlSessionFactoryBeanをBean定義することで、SpringのFactoryBeanの仕組みにより、SqlSessionFactoryBuilderを用いてSqlSessionFactoryがBeanとして生成される。この際、DIコンテナ上にBean化されたデータソースをインジェクションすることで、捜査対象のデータベースを指定できる
  2. SqlSessionFactoryBuilderは、MyBatis設定ファイルの定義に基づいてSqlSesssionFactoryを生成する。生成されたSqlSessionFactoryは、SpringのDIコンテナによって管理される
11.1.3 MyBatis-Springの例外ハンドリング

11.2 Spring + MyBatisのセットアップ

本節では、MyBatisをSpring上で使用するためのセットアップ方法を紹介します。

11.2.1 ライブラリのセットアップ