Spring BootとJPAでMySQLに繋ぐ – データの取得と作成

プロジェクトの準備

Spring Bootのプロジェクトの用意ができていない方は以下を参考にプロジェクトを作成する。

Macの方はMySQLの準備は以下の記事を参考にする。

Macでmysqlを扱う方法 - Qiita
Macでmysqlの設定方法を調べたかったのに、 Windows系の記事の方が多かったので、 自分でまとめて記事にしてみました。 Terminal上での作業を想定しています。 ※ も含めて対象のものに置き換えてく...

クラス作成・コード記述

srcフォルダー以下のファイル構造は以下。

APIへのリクエストをハンドリングするcontroller層、ビジネスロジックを管理するservice層、データソースにアクセスするrepository層という感じでパッケージを分けています。

build.gradleにはMySQLを扱うためにdependenciesに以下を追加。

以下からは各クラスファイルの記述内容です。

Book.java

MySQLのテーブル定義を書いたクラス。@EntityとつけることでMySQLのレコードデータとして扱えるようになる。クラス名がテーブル名と一致しない場合は@Table(name = “テーブル名”)をつけることで対応させることができる。

booleanでデフォルト値を扱う場合は@Column(nullable = false, columnDefinition = "tinyint(1) default 0")と書くことでboolean型を扱えるようになる。(0がfalse)

BookController.java

@RestControllerでこのクラスがRESTAPIとして使えるようにする。

@RequestMapping(“/book”)をつけることで、http(s)://<domain>/bookの形でAPIにアクセスできるようになる。

@AutowiredとつけることでbookServiceをDIしている。

@RequestMapping(method = RequestMethod.GET, path = “/”)でこのメソッドを実行する為のRESTAPIのメソッド、URLパスを定義できる。pathの値を{}で囲ったものはURLパラメータとして受け取れ、メソッドの引数に値が入る。

@PathVariable(value = “bookId”)でメソッドがどのRequestMappingのURLパラメータを受け取るか定義できる。

@RequestBodyはPOSTメソッドでリクエストボディを受け取る為のクラスにつける。本来はリクエストボディ用のクラスとMySQL用のクラスは分けるべきだがここでは同じにしている。

BookService.java

@ServiceでこのクラスがビジネスロジックをもつDIクラスということを示す。@Componentでも挙動は同じだが、クラスの役割としてわかりやすいように@Serviceにする。

様々なデータソースを参照したり、計算したりするときはこのクラスのメソッドに書く。

BookRepository.java

@Repositoryをつけることでこのクラスがデータソースを扱うクラスということを示す。今回はJPAを使ってMySQLにアクセスしているのでJpaRepositoryをextendsしている。メソッドめいとJPAのルールに従って書くことでSQLを直接書かなくてもMySQLの操作ができる

JpaRepository<Book, Integer>とすることで、テーブルの構造に対応するクラスはBookで、テーブルのIDがint型であることを示す。

List<Book> findAll();テーブルから全レコード取る為のメソッドである。findAllがJpaRepositoryにあるのでそのまま受け取るクラスだけ指定して使っている。これは以下のように書くのと同じである。@Queryを使うことでこのメソッドが呼ばれた時に実行するSQLを直接記述することができる。

Book findByBookId(Integer id);はIDを指定して1レコードだけ取得するためのメソッドである。こちらは以下のように書くのと同じである。?1と書くことでメソッドの引数に対応した順番で値を参照することができる。

レコードを作成、更新するときは@Transactionalとつけることでトランザクション管理がその処理に対してできるようになる。

application.yml(application.propatiesより記述しやすいのでapplication.ymlを作っている)

urlはjdbc:mysql://<ドメイン>:<ポート番号>/<データベース名>で書く。ddl-auto: updateとすることで起動時にテーブルがなかったら自動でEntiryクラスを参照しその定義にあったテーブルを作ってくれる。(普通はSQLでcreate tableでテーブルを作るが今回は簡略化のためddl-autoを使う。)

あとはプロジェクトを起動して以下のコマンドを叩けばデータの作成、取得ができているのが確認できます。

コメント

  1. […] Spring BootとJPAでMySQLに繋ぐ – データの取得と作成プロジェクトの準備Spring Bo… […]

  2. […] Spring BootとJPAでMySQLに繋ぐ – データの取得と作成プロジェクトの準備Spring Bo… […]

  3. […] Spring BootとJPAでMySQLに繋ぐ – データの取得と作成プロジェクトの準備Spring Bo… […]