Spring Boot DB連携

Spring Bootアプリケーションで定義ファイルから取得した数値(文字列型)を利用してSQLを実行してみた

Spring Bootアプリケーションでは、application.propertiesの値を@Valueアノテーションを利用して取得できるが、その値(数値)をSQLで利用することもできる。

今回は、SQL Serverに接続するSQLにおいて、定義ファイルから取得した数値(文字列型)を利用してみたので、そのサンプルプログラムを共有する。

前提条件

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

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

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

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、今回作成・変更したプログラムである。

build.gradleの内容は以下の通りで、Lombok・SQL Server接続・MyBatisを利用するための定義を追加している。

また、application.propertiesの内容は以下の通りで、SQL実行時に利用する数値(文字列型)や、DB接続先の定義を追加している。

さらに、USER_DATAテーブルにアクセスするためのエンティティクラスの内容は、以下の通り。

また、USER_DATAテーブルにアクセスするためのMapperの内容は以下の通りで、生年月日が1990年6月20日のpropNum日前~1990年6月20日のpropNum日後までのデータを取得するようにしている。

さらに、Demoサービスクラスの内容は以下の通りで、SQL実行時に利用する数値(文字列型)の取得や、USER_DATAテーブルにアクセスするMapperの呼び出しを行っている。

また、Spring Bootのメインクラスの内容は以下の通りで、Demoサービスクラスを呼び出している。

これらのソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-property-int-string-sql/demo



「CODE×CODE」は、需要の高い技術(AWS, Python等)を習得できるプログラミングスクールスクールだった近年、さまざまな会社でクラウド(特にIaaSやPaaSのパブリッククラウド)の需要が非常に高まっていて、クラウドサービスによるシステム開...

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

サンプルプログラムの実行結果は、以下の通り。

1) SQL ServerのUSER_DATAテーブルには、以下のデータを入れておく。
サンプルプログラムの実行結果_1

2) 1)の状態でDemoサービスクラスの「DemoApplication.java」を実行した結果は以下の通りで、prop1を利用した場合は生年月日が1990年6月15日~1990年6月25日(propNum=5)のデータが、prop2, prop3を利用した場合は生年月日が1990年6月20日(propNum=0)のデータが、それぞれ取得できることが確認できる。
サンプルプログラムの実行結果_2

3) UserDataMapper.xmlで、以下の赤枠のように、propNumのCONVERTを除外する。
サンプルプログラムの実行結果_3

4) 3)の状態でDemoサービスクラスの「DemoApplication.java」を実行した結果は以下の通りで、propNumの変換に失敗し、赤枠のSQLエラーが発生したことが確認できる。
サンプルプログラムの実行結果_4

5) A5M2を利用して、SQL Server上で、UserDataMapper.xmlに記載したWHERE句の条件でSQL実行した結果は、以下の通り。

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

6) A5M2を利用して、Oracle上で、UserDataMapper.xmlに記載したWHERE句の条件でSQL実行した結果は、以下の通り。

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

7) A5M2を利用して、MySQL上で、UserDataMapper.xmlに記載したWHERE句の条件でSQL実行した結果は、以下の通り。

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

8) A5M2を利用して、PostgreSQL上で、UserDataMapper.xmlに記載したWHERE句の条件でSQL実行した結果は、以下の通り。

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

要点まとめ

  • Spring Bootアプリケーションで定義ファイルから取得した数値(文字列型)をSQLで利用するには、文字列を数値に変換する必要がある。