Spring Boot DB連携

MySQL上でMyBatisを利用して複数レコードをまとめて追加/更新してみた

Spring BootとMyBatisを利用して、MySQLに接続するアプリケーション上では、引数に追加・更新対象データのリストを渡し、XMLファイル内のSQL文でforeach構文による繰り返し処理を行うことで、複数のレコードをまとめて追加・更新することができる。

今回は、Spring Bootアプリケーション内でMyBatisフレームワークを利用する状態で、MySQLに接続し、複数のレコードをまとめて追加・更新するサンプルプログラムを作成してみたので、共有する。

前提条件

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

Oracle上でMyBatisを利用して複数レコードをまとめて追加/更新してみたSpring BootとMyBatisを利用して、Oracleに接続するアプリケーション上では、引数に追加・更新対象データのリストを渡し...

また、下記記事の前提条件を満たしていること。

サムネイル画像
Spring BootでMySQLに接続しMyBatisを利用してみたこれまでは、Spring Bootアプリケーションで接続するデータベースはOracleでサンプルプログラムを作成してきたが、今回はMyS...

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

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

build.gradleの内容は以下の通りで、MySQLに接続するためのJDBCライブラリを追加している。

application.propertiesの内容は以下の通りで、DB接続先をMySQLに変更している。

UserDataMapper.xmlの内容は以下の通りで、複数のレコードをまとめてUSER_DATAテーブルに追加/更新するSQLを、MySQL用に変更している。

なお更新時のSQL文は、以下のサイトのELTとFIELDのキーワードを利用する方式になっている。
https://qiita.com/yokozawa/items/13f837a27afc813eac32

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-mysql-multi-insert-update/demo



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

サンプルプログラムの実行結果は以下の通りで、複数のレコードをまとめて追加・更新する処理が実行できることが確認できる。

1) 以下のように、DemoApplicationクラスで、複数のレコードをまとめて追加する処理(demoServiceクラスのinsertMultiDataメソッド)を有効にする。
サンプルプログラムの実行結果_1

2) 更新対象のUSER_DATAテーブルを、以下のように、全件削除した状態にする。

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

3) 1)2)の状態でSpring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通り。
サンプルプログラムの実行結果_3

4) 3)を実行後のUSER_DATAテーブルの中身は以下の通りで、複数のレコードをまとめて追加できたことが確認できる。

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

5) 以下のように、DemoApplicationクラスで、複数のレコードをまとめて更新する処理(demoServiceクラスのupdateMultiDataメソッド)を有効にする。
サンプルプログラムの実行結果_5

6) 4)5)の状態でSpring Bootのメインクラス(DemoApplication.java)を実行した結果、コンソールログに出力される内容は以下の通り。
サンプルプログラムの実行結果_6

7) 6)を実行後のUSER_DATAテーブルの中身は以下の通りで、複数のレコードのNAME, MEMOの値をまとめて更新できたことが確認できる。

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

要点まとめ

  • Spring BootとMyBatisを利用して、MySQLに接続するアプリケーション上では、引数に追加・更新対象データのリストを渡し、XMLファイル内のSQL文でforeach構文による繰り返し処理を行うことで、複数のレコードをまとめて追加・更新することができる。
  • MySQLの場合の複数レコードの更新する際は、ELTとFIELDのキーワードを利用する。