Kotlin プログラミング

Kotlin + Springboot + MySQL + Dockerを試してみる。

Dockerで立てたMySQLのコンテナに、Kotlin + Springbootからアクセスしてみるだけの記事です。

参考にさせていただいたのはQiitaの以下の記事です。

 

Dockerを使ったSpringboot/KotlinとMySQLの一番シンプルな接続方法

Kotlin/SpringBoot/MySQLでRESTAPIを作ってみる

 

基本こちらを元に、いい感じに自分なりにカスタマイズしていくものになります。

 

MySQLの準備

 

コンテナ作成

以下の内容で、docker-compose.ymlを作成。

 

docker-compose.yml

 

コンテナを起動します。

> docker-compose up -d --build

 

一応コンテナが立ち上がったかどうか確認する。

❯ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------
kotlin_springboot_container docker-entrypoint.sh mysql ... Up 3306/tcp, 33060/tcp, 0.0.0.0:3316->3316/tcp

 

SpringInitializerでプロジェクト作成

以下のURLからSpringbootの雛形を作ります。

 

https://start.spring.io/

 

 

上記のような感じで入力して「Generate」を押してプロジェクトをダウンロードします。(Zipで落ちます)

 

IntelliJ IDEで起動

ZipがダウンロードできたらIntelliJ IDEで起動します。

 

まだダウンロードしていない方は、KotlinのMac環境構築!Homebrew(Cask)でIntelliJ IDEAを導入するを、

起動方法が分からないという方は、SpringBoot+KotlinでHelloWorldが分かりやすいので参考にしてみてください。

 

 

KotlinのMac環境構築!Homebrew(Cask)でIntelliJ IDEAを導入する

Androidの公式開発言語に認定され、現在では従来のJavaが担っていたバックエンド領域にも代替しつつある 超人気上昇中の言語Kotlinについて開発環境を構築していきます。   具体的に ...

続きを見る

 

Kotlin側の開発

プロジェクトが起動できたらいよいよKotlin側の開発をしていきます。

以下、プロジェクト名をdemoとしていますが、適時ご自分のプロジェクト名に置き換えてお読みください。

 

MySQLとJPAの設定

MySQLとJPA(SQLをクラスベースで使えるようにしてくれるやつ)を使えるようにします。

demo/src/main/resources/application.ymlを以下のように編集します。

 

application.yml

 

パッケージ設定

依存関係を記述するために、build.gradle.ktsに以下を追加します。

 

build.gradle.kts

不要なパッケージもあるかも。。

 

Entity作成

Table定義を行うEntityを作成します。entityディレクトリを作成し、User.ktを以下の内容で保存。

 

/main/kotlin/com.example.demo/entity/User.kt

 

Repository作成

repositoryディレクトリを作成し、UserRepository.ktを以下の内容で保存。

 

/main/kotlin/com.example.demo/repository/UserRepository.kt

 

Service作成

serviceディレクトリを作成し、UserService.ktを以下の内容で保存。

 

/main/kotlin/com.example.demo/service/UserService.kt

 

Controller作成

controllerディレクトリを作成し、UserController.ktを以下の内容で保存。

 

/main/kotlin/com.example.demo/controller/UserController.kt

 

実行してみる

ここまでできたらいよいよAPIを叩いて、DBの操作ができるか試してみます。

Buildして、ターミナルからCurlで実行

 

$ curl -X POST -H "Content-Type: application/json" -d '{"name": "Taro", "age" :25}' http://localhost:8080/api/user

 

上記コマンドでは、/api/userに対してPOSTでデータを送っているので、呼び出されるAPIは「create()」になります。

つまりDBに書き込みを行います。

 

実行し、以下のようなJSONレスポンスが返却されれば成功!!

 

{"id":1,"name":"Taro","age":25}%

 

 

レスポンスのJSONを分かりやすく(おまけ)

レスポンスのJSON表示を分かりやすくするために、jqコマンドをインストールします。

$ brew install jq

 

 

もう一回curlして確認する。レスポンスをパイプでjqに渡します。

$ curl -X POST -H "Content-Type: application/json" -d '{"name": "Koji", "age" :26}' http://localhost:8080/api/user | jq

 

以下のような出力となれば成功!!

 

{
"id": 2,
"name": "Koji",
"age": 26
}

 

見やすいぜ!!

 

DBに保存されたか確認

無事にAPIを叩けたところで、MySQLに保存されたか確認します。

 

$ mysql -u docker_user -pdocker_pass -h 127.0.0.1

mysql> use master;

mysql> show tables;(usersテーブルが出来てることを確認)

+--------------------+
| Tables_in_master |
+--------------------+
| hibernate_sequence |
| users |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from users;(データを確認)

+----+-----+------+
| id | age | name |
+----+-----+------+
| 1 | 25 | Taro |
| 2 | 26 | Koji |
+----+-----+------+

 

ブラウザから確認

無事保存が確認出来たので、最後にブラウザから確認します。

 

http://localhost:8080/api/user

 

 

アクセスすると/api/userにGETのリクエストが飛ぶので「findAll()」が呼ばれ、全件表示がされます。

 

成功!!あとは好きなようにカスタマイズください!

 

よく読まれている記事

1

  現在5年目のエンジニアで26歳です。 今回は20代の現役エンジニアとして、自分も含め転職について考えている方に向けて20代エンジニア転職に完全特化したおすすめのサービスを3つ紹介していき ...

2

これからエンジニアになりたい、プログラミングを使えるようになりたいという方に向けて 山のようにあるプログラミングスクールの中から、特におすすめなスクールをタイプ別に逆引きで3つ紹介します。 &nbsp ...

3

みなさんはを使っていますでしょうか。   本記事を見ていただいているということは、   プログラミングの勉強でを使うことに興味がある、 もしくはこれから動画を購入したいけどどれを買 ...

-Kotlin, プログラミング
-, , ,

© 2020 クラインの備忘壺