Spring Boot DB連携

MyBatisフレームワーク内で引数のリストからIN句を自動生成してみた

Spring Bootアプリケーション内でDBアクセス処理を含む場合に、MyBatisフレームワークを利用することがあるが、foreach要素を用いることで、引数のリストからIN句を自動生成することができる。

今回は、MyBatisフレームワーク内で引数のリストからIN句を自動生成するサンプルプログラムを作成してみたので、共有する。

前提条件

下記記事の実装が完了していること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

また、Oracle XEのインストールが完了し、USER_DATAテーブルに以下のデータが追加されていること。

前提条件

サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから追加/変更したプログラムである。

build.gradleの内容は以下の通りで、Oracle JDBCドライバやMyBatisフレームワーク、Lombokを追加している。

また、application.propertiesの内容は以下の通りで、DB接続先やSQLログ出力定義を設定している。



さらに、UserDataMapper.java、UserDataMapper.xmlの内容は以下の通りで、UserDataMapper.xml内で、foreach要素内で引数のリストからIN句を自動生成している。なお、引数のリストがNULLか空の場合は、WHERE句を指定しないよう設定している。

また、USER_DATAテーブルのデータを格納するエンティティクラスの内容は以下の通り。

さらに、Spring Bootのメインクラスの内容は以下の通りで、CommandLineRunnerインタフェースを実装しrunメソッド内でMapper呼出処理を記載することで、このクラスを起動しただけでMapper内のSQLが実行されるようになっている。



サンプルプログラムの実行結果

Spring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通り。
サンプルプログラムの実行結果
上記実行結果の赤枠部分で、UserDataMapperクラスのfindByIdListメソッドの引数に指定したリストからIN句が自動生成されることが、青枠・緑枠部分で、UserDataMapperクラスのfindByIdListメソッドの引数にNULLや空文字を指定した場合にWHERE句が設定されないことが、それぞれ確認できる。

要点まとめ

  • MyBatisフレームワーク内でforeach要素を用いることで、引数のリストからIN句を自動生成することができる。