Kotlin + Spring Boot + Spring JPA + MySQLでCRUD操作する

Kotlin + Spring Boot + Spring JPA + MySQLでCRUD操作する

Kotlin

Kotlin+Spring Bootで簡単なAPIをClean Architectureで実装してみた

Kotlin + Spring Bootを触ってみたので、Clean Archi…
mintaku-blog.net

前回スタブで取得していたデータをちゃんとセットアップしてDBから取得できるようにします。またTODOアプリっぽいAPIを実装し、CRUD操作できるようにします。

DockerでMySQL導入し、Spring BootからDB接続できるようにする

まずは既存のAPIにMySQLを導入します。今回はDockerでMySQLを選択しました。

M1 Macで起動するためにplatform: linux/x86_64を追加しています。volumesでコンテナ起動時のデータセットアップとMySQLの設定ファイルを読み込んでいます。

・docker-compose.yml

 

my.cnfでMySQLの設定を行います。my.cnfにcharacter-setを追加しているのはMySQLに日本語のデータを追加した際に文字化けになったのでその対応です。

参考:https://qiita.com/Asaiii12/items/69e4420d06d91374428a

・my.cnf

 

init.sqlではコンテナ作成時にテーブルの作成とデータ投入をしています。volumsで./initdb.d:/docker-entrypoint-initdb.dを指定すると、指定ディレクトリ配下のSQLが実行されるようになっています。

・initdb.d/init.sql

 

全て完了したらDockerを立ち上げます。

以下のコマンドで立ち上げたMySQLに接続し、実際にDBやテーブルが作成できるかを確認します。

 

アプリケーションからDB接続できるようにするためにapplication.propertiesにDB接続情報を追加します。

・src/main/resources/application.properties

 

Spring JPAの導入

Spring JPAを導入するためbuild.gradle.ktsのdependenciesに以下を追加し、Gradleをリビルドします。

・build.gradle.kts

 

Entityの作成

Entityで定義されたテーブル情報が、自動インサートの対象になります。今回はTODOリストを意識しているのでidとtitle、contentのカラムを定義しています。

・entity/Task.kt

 

Repositoryの作成

JPA用のインターフェースを定義します。今回はそれぞれSQLを書いて定義しています。

・repository/TaskRepository.kt

 

DriverでRepositoryで定義したメソッドを呼び出す

DriverでRepositoryで定義したメソッドを呼び出し、実際にDB操作します。curlなどで確認しCRUDできていることが確認できれば完了です。

・driver/TaskDriver.kt