1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【頑張れば5分で作れる】Spring Boot + MyBatisで超簡単なCRUD処理のREST APIを作る【VSCode】

Last updated at Posted at 2021-09-17

CRUD処理のあるSpring Bootアプリを急いで作ったらどれくらい早くできるのか挑戦したところ...
5分で作ることができました!

今回はこちらの動画の解説記事になります。
CRUD(Create/Read/Update/Delete)処理をREST APIで実装していきます。

開発環境

  • Windows 10
  • Visual Studio Code
    • (↓主な拡張機能)
    • Extension Pack for Java
    • Lombok Annotations Support for VS Code
    • Spring Boot Extension Pack
  • Postman
  • Java 11
  • Maven
  • MySQL 8.0

データベースとテーブルの作成

MySQLで事前にデータベースとテーブルを作成しておきます。

今回は以下のようなテーブルを作成しました。

image.png

CREATE TABLE users(
	id INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(100)
);

Spring Bootプロジェクトの作成

Ctrl + Shift + P1でコマンドパレットを開き、Spring Initializr: Create a Maven project...を選択します。

image.png

バージョン選択などの質問がいくつか出てきますが、最後の依存関係以外はデフォルトで問題ないので、Enterキーを6回押します。

最後の質問であるSpring Initializr: Choose dependenciesでは、以下の4つの依存関係を追加します。

  • Spring Web
  • MySQL Driver
  • MyBatis Framework
  • Lombok

依存関係を追加し終わったら、Selected 4 dependenciesにカーソルが合った状態でEnterを押すと、プロジェクトのひな型がダウンロードされます。

次に、ダウンロードされたSpring Bootプロジェクトを開いてコードを書いていきます。

application.properties

Ctrl + Pでファイルを名前で検索できるので、appと入力して先頭に出てきたapplication.propertiesを開いて編集します。

application.properties
spring.datasource.url=jdbc:mysql://<ホスト名>:<ポート>/<データベース名>
spring.datasource.username=<ユーザー名>
spring.datasource.password=<パスワード>

(今回の動画の場合)

application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root

User.java

DemoApplication.javaと同じディレクトリに、User.javaを作成します。これはモデル、エンティティ、またはDTOと言われるものです。

User.java
package com.example.demo;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private int id;
    private String name;
}

UserMapper.java

先程と同じディレクトリに、UserMapper.javaを作成します。クラスではなくインターフェースなので注意です。また、今回の環境ではSQL部分の入力チェックや補完が効かないのでミスしやすいです。

UserMapper.java
package com.example.demo;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

@Mapper
public interface UserMapper {

    @Insert("insert into users (name) values (#{name})")
    public boolean create(String name);

    @Select("select * from users")
    public List<User> read();

    @Update("update users set name = #{name} where id = #{id}")
    public boolean update(int id, String name);

    @Delete("delete from users where id = #{id}")
    public boolean delete(int id);

}

UserController

先程と同じディレクトリに、UserController.javaを作成します。

UserController.java
package com.example.demo;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    UserMapper userMapper;

    @PostMapping("")
    public boolean create(@RequestBody String name) {
        return userMapper.create(name);
    }

    @GetMapping("")
    public List<User> read() {
        return userMapper.read();
    }

    @PatchMapping("/{id}")
    public boolean update(@PathVariable int id, @RequestBody String name) {
        return userMapper.update(id, name);
    }

    @DeleteMapping("/{id}")
    public boolean delete(@PathVariable int id) {
        return userMapper.delete(id);
    }

}

アプリの起動

サイドバーのエクスプローラーのSPRING BOOT DASHBOARDから、アプリを起動します。

image.png

動作確認

APIの動作確認には、Postmanというソフトを使用します。

Read処理として、usersテーブルのデータをGETリクエストで取得します。

image.png

まずはこちらのGETリクエストを送ってみると、データがまだ無いため空のオブジェクト[]が返ってきました。

次に、Create処理として、POSTリクエストを送ってみます。

image.png

リクエストボディで渡した名前のユーザーを作成するAPIになっています。今回はリクエストボディに太郎という文字列を含めています。

POSTリクエストにはtrueが返ってきました。

ここでもう一度GETリクエストでusersテーブルの中身を確認してみると、idが1、nameが太郎のレコードが作成されていることが分かります。

次に、Update処理として、PATCHリクエストを送ってみます。

image.png

パスパラメータでid、リクエストボディで名前を渡して、指定したidのユーザーの名前を更新するAPIになっています。

PATCHリクエストにはtrueが返ってきました。

もう一度GETリクエストでusersテーブルの中身を確認してみると、idが1のユーザーのnameが太郎からたろうに更新されていることが分かります。

最後に、Delete処理として、DELETEリクエストを送ってみます。

image.png

パスパラメータで渡したidのユーザーを削除するAPIになっています。

DELETEリクエストにはtrueが返ってきました。

もう一度GETリクエストでusersテーブルの中身を確認してみると、空のオブジェクト[]が返ってきました。

以上です。

最後に

EclipseやIntellij IDEAではどれだけ早く作れるのか気になるので、挑戦をお待ちしています!!

  1. ※キーボードショートカットは初期設定のものを紹介しています。

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?