今回は、タイトル通りSpringBootでMySQLにJDBC接続する際のメモとなります。
尚、SpringBootのプロジェクトは、以下の要領で作成したものを前提としてメモしています。
データベース接続設定
Propertiesファイルに以下の内容を追加します。
- spring.datasource.url=jdbc:mysql://ホスト名:ポート名/接続DB名?serverTimezone=JST
- spring.datasource.username=DBユーザー名
- spring.datasource.password=DBユーザーパスワード
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
以下は、MAMPをインストールした時のMySQLのデフォルト設定の内容に合わせた指定です。
テストとして、MAMPを起動した状態でMySQLのDBテーブルに接続してみます。
spring.datasource.url=jdbc:mysql://127.0.0.1:8889/SpringBoot_test_01?serverTimezone=JST spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
※application.propertiesの設定項目は、以下の公式ドキュメントに記載されております。
Maven依存設定
今回は、MavenでMySQL接続・JDBC設定を行います。
以下の内容をpom.xmlに追加します。
<!-- MySql設定 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- JDBC設定 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency>
尚、pom.xmlを修正しても、修正内容がプロジェクトに反映されない場合があります。
その場合には、以下をお試しください。
プロジェクト -> 右クリックメニュー -> Maven -> プロジェクトの更新
SQLクエリ実行 クラス実装
JdbcTemplateを利用して、SQLクエリを実行するクラスを実装します。
package com.example.demo; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class UserSelectController { @Autowired JdbcTemplate jdbcTemplate; // userテーブルの全データ抽出クエリ実行 @RequestMapping(path="/users", method=RequestMethod.GET) public String userAll() { return jdbcTemplate.queryForList("SELEC * FROM user").toString(); } // userテーブルのID抽出 @RequestMapping(path="/users/{id}", method=RequestMethod.GET) public String userMatchId(@PathVariable String id) { List<Map<String,Object>> list; list = jdbcTemplate.queryForList("SELEC * FROM user WHERE id = ?", id); return list.toString(); } }
JdbcTemplateクラスのqueryForListは、引数として文字列のSQLを渡して呼び出すと、
DB接続を行い、DBから受け取ったデータをList<Map<String,Object>>型で返却してくれます。
試しに、userテーブルの全レコード(全カラム)を表示するメソッドと、
userテーブルのIDが指定値と一致するレコード(全カラム)を表示するメソッドを実装して、
動作を確認してみます。
※userMatchIdメソッドの方は、わざわざ変数宣言していますが特に意味はありません。
org.springframework.jdbc.core.JdbcTemplate.queryForList(String sql, @Nullable Object… args) throws DataAccessExceptionの型を確認する意味で、敢えて変数宣言しています。
あと、今回は非常に簡単に確認を行うだけなので、
画面表示用のテンプレート(html)は用意せず、URL指定でGETされた結果をそのまま表示したいので、
toString()でそのままの形で文字列返却しています。
実行確認
プロジェクトのビルドを行なった後、通常の起動方法でサーバーを起動します。
サーバーが起動して、ログが正常に出力されたらブラウザで確認を行います。
localhost:ポート名/urlパターンの形式でブラウザのURL欄に入力してアクセスします。
問題なく、DBテーブルの内容が表示されました。
試しに、id指定の方も確認してみます。
今回のメモは以上となります。
今回は、JDBCでMySQLに接続する内容だったので、
今度はORMなどを使った方法もメモしたいと思います。
今まで見てきたどんなサイトよりもわかりやすくて、、、草をひとつまみ、、、、
勉強になります。。。。
DB接続で詰まっていましたが、他のどのサイトよりもわかりやすく、設定も簡潔でしたので非常に助かりました。
本当にありがとうございます!
コメント頂きありがとうございます!
そう言って頂けると励みになります。