Spring Boot DB連携

MyBatisを使って各DBに接続するアプリケーション上でWITH句を利用してみた

SQLにおいてWITH句を利用すると、以下のサイトに記載されている通り、複数回書かれている副問合せを1つにまとめて記述することができるため、見通しのよいSQLを記載することができる。
https://oreno-it.info/archives/698

また、WITH句は、Oracle DBだけでなく、MySQL, PostgreSQL, SQL Serverの各DBにおいて利用できる。Oracle DBに接続した場合のWITH句の利用については、以下の記事を参照のこと。

MyBatisを使ってOracle DBに接続するアプリケーション上でWITH句を利用してみたSQLにおいてWITH句を利用すると、以下のサイトに記載されている通り、複数回書かれている副問合せを1つにまとめて記述することができるた...

なお、MySQLは、MySQL8.0でWITH句が利用できるようになっている。詳細は以下のサイトを参照のこと。
https://qiita.com/mzuk/items/78a0c94829832e0c4c7c

今回は、MyBatisを使って各DBに接続するアプリケーション上でWITH句を利用してみたので、そのサンプルプログラムを共有する。

前提条件

各DBにおいて、下記記事の「EMPLOYEEテーブル」のテーブル・データ作成が完了していること。

自己結合を含むSQLのIN句とEXISTS句を試してみた同じテーブル同士を結合することを「自己結合」という。自己結合を含むSQLでは、結合する2テーブルの区別を付かないことによる不具合が発生し...

また、下記記事に記載した方法で、A5M2を利用して各DBに接続できていること。

A5M2を利用して各DBに接続してみたA5M2(A5:SQL Mk-2)は、SQL文の入力支援やER図作成などの機能を備えていて、Oracle、MySQL、PostgreSQ...

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

各DBのIN句で1000件を超える項目を指定してみたOracleデータベースの場合、IN句で1000件を超える項目を指定するとエラーになってしまうが、他のDBではIN句に1001件の項目を...

MySQLの場合の実行結果

A5M2によってMySQLに接続し、WITH句を利用したSQLの実行結果は、以下の通り。

1) 前提条件の記事で作成したEMPLOYEEテーブルの中身は、以下の通り。
MySQL実行結果_1

2) EMPLOYEEテーブルから、生年月日が1965年5月15日の上司をもつデータを取得するSQLを、WITH句を用いて記載した結果は以下の通りで、IN句を利用した場合と同じ結果になっている。

MySQL実行結果_2

PostgreSQLの場合の実行結果

A5M2によってPostgreSQLに接続し、WITH句を利用したSQLの実行結果は、以下の通り。

1) 前提条件の記事で作成したEMPLOYEEテーブルの中身は、以下の通り。
PostgreSQL実行結果_1

2) EMPLOYEEテーブルから、生年月日が1965年5月15日の上司をもつデータを取得するSQLを、WITH句を用いて記載した結果は以下の通り。

PostgreSQL実行結果_2

SQL Serverの場合の実行結果

A5M2によってSQL Serverに接続し、WITH句を利用したSQLの実行結果は、以下の通り。

1) 前提条件の記事で作成したEMPLOYEEテーブルの中身は、以下の通り。
SQLServer実行結果_1

2) EMPLOYEEテーブルから、生年月日が1965年5月15日の上司をもつデータを取得するSQLを、WITH句を用いて記載した結果は以下の通り。

SQLServer実行結果_2
「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

MyBatisを利用したサンプルプログラムの作成と実行結果

作成したサンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成

上記の赤枠のうち、MySQLに接続するSQL「EmployeeMapperMs.xml」の内容は以下の通り。

上記の赤枠のうち、PostgreSQLに接続するSQL「EmployeeMapperPs.xml」の内容は以下の通り。

上記の赤枠のうち、SQL Serverに接続するSQL「EmployeeMapperSs.xml」の内容は以下の通り。



上記の赤枠のうち、各DBに接続しSQLを実行する「DemoApplication.java」の内容は以下の通り。

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

「DemoApplication.java」を実行した結果は以下の通りで、A5M2によって各DBに接続した実行結果と同じ結果になっている。
サンプルプログラムの実行結果

https://www.purin-it.com/doctor-homenet

要点まとめ

  • SQLにおいてWITH句を利用すると、複数回書かれている副問合せを1つにまとめて記述することができるため、見通しのよいSQLを記載することができる。
  • WITH句はOracle DBだけでなく、MySQL(Ver8.0以上), PostgreSQL, SQL Serverの各DBにおいて利用できる。