Spring BootでMyBatisを使ったときのメモを残しておきます。具体的には、MyBatisを使ってSELECT
文を発行し、結果をコンソールに表示するプログラムを作ります。今回使用するデータベース(H2)はメモリ上で利用するものなので、事前にMySQLやOracleといったクライアントを用意する必要はありません。
環境
今回使用した環境は以下のとおりです。
Javaのインストール方法は以下記事をご覧ください。
プロジェクトの雛形を作成する
まずはSpring Initializrでプロジェクトの雛形を作成します。Webからでも作成できますが、今回はコマンドでサクッと作成します。ポイントは、依存関係にMyBatisとH2(メモリ上で使えるDB)を追加しているところです。
プロジェクトのディレクトリ構造は以下のようになっているはずです。
SQLファイルを作成する
Spring Bootでは、アプリケーション起動時にschema.sql
やdata.sql
といったファイル名のSQLを実行してくれます。Spring Bootすごいですね。
今回は、schema.sql
にCREATE TABLE
文を、data.sql
にINSERT
文を定義します。これらのSQLは、H2(メモリ上で使えるDB)に対して発行されます。
src/main/resources/schema.sql
src/main/resources/data.sql
ドメインクラスを作成する
Getter, Setterが定義されたドメインクラスを作成します。
src/main/java/com/example/demo/City.java
Mapperインタフェースを作成する
SQLとドメインクラスを紐付けるMapperインタフェースを作成します。@Mapper
を付与したインタフェースを定義し、メソッドにアノテーションを使ってSQL文を定義するだけです。インタフェースの実装はMyBatisが自動で行ってくれるので、自分で実装クラスを書く必要はありません。
src/main/java/com/example/demo/CityMapper.java
アプリケーションクラスを修正する
Mapperをインジェクションし、Mapperのメソッドを呼び出してやればOKです。CommandLineRunner
インタフェースの使い方については、以下記事をご覧ください。
Spring Bootで簡単なコマンドラインアプリケーションを作成してみる - Reasonable Code
src/main/java/com/example/demo/DemoApplication.java
アプリケーションクラスを実行すれば、SELECT
文の結果(1,Osaka,Japan
)がコンソールに表示されるはずです。
XMLファイルでSQLを定義する場合
Mapperインタフェース内でSQLをアノテーションで定義しましたが、XMLファイルに置き換えることも可能です。複雑なSQLを定義するときはXMLファイルに定義した方が可読性が高まりそうです。
まずは、Mapperインタフェース内でアノテーションを使ってSQL文を定義していた箇所を取り除きます。
src/main/java/com/example/demo/CityMapper.java
あとは、XMLファイルを作成し、SQL文を定義してやればOKです。
src/main/resources/com/example/demo/CityMapper.xml
各項目について簡単に補足しておきます。
namespace
:Mapperの完全修飾名id
:Mapperのメソッド名resultType
:返却されるオブジェクトの型
XMLファイルでSQLを定義する場合も、アプリケーションクラスを実行すれば、SELECT
文の結果(1,Osaka,Japan
)がコンソールに表示されるはずです。
お疲れさまでしたー。
まとめ
Spring BootでMyBatisを使ってみました。想像以上に簡単にデータベースアクセスができてびっくりです。
ソースはGitHubに上げています。