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で事前にデータベースとテーブルを作成しておきます。
今回は以下のようなテーブルを作成しました。
CREATE TABLE users(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
Spring Bootプロジェクトの作成
Ctrl + Shift + P
1でコマンドパレットを開き、Spring Initializr: Create a Maven project...
を選択します。
バージョン選択などの質問がいくつか出てきますが、最後の依存関係以外はデフォルトで問題ないので、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を開いて編集します。
spring.datasource.url=jdbc:mysql://<ホスト名>:<ポート>/<データベース名>
spring.datasource.username=<ユーザー名>
spring.datasource.password=<パスワード>
(今回の動画の場合)
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
User.java
DemoApplication.javaと同じディレクトリに、User.javaを作成します。これはモデル、エンティティ、またはDTOと言われるものです。
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部分の入力チェックや補完が効かないのでミスしやすいです。
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を作成します。
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から、アプリを起動します。
動作確認
APIの動作確認には、Postmanというソフトを使用します。
Read処理として、usersテーブルのデータをGETリクエストで取得します。
まずはこちらのGETリクエストを送ってみると、データがまだ無いため空のオブジェクト[]
が返ってきました。
次に、Create処理として、POSTリクエストを送ってみます。
リクエストボディで渡した名前のユーザーを作成するAPIになっています。今回はリクエストボディに太郎
という文字列を含めています。
POSTリクエストにはtrue
が返ってきました。
ここでもう一度GETリクエストでusersテーブルの中身を確認してみると、idが1
、nameが太郎
のレコードが作成されていることが分かります。
次に、Update処理として、PATCHリクエストを送ってみます。
パスパラメータでid、リクエストボディで名前を渡して、指定したidのユーザーの名前を更新するAPIになっています。
PATCHリクエストにはtrue
が返ってきました。
もう一度GETリクエストでusersテーブルの中身を確認してみると、idが1
のユーザーのnameが太郎
からたろう
に更新されていることが分かります。
最後に、Delete処理として、DELETEリクエストを送ってみます。
パスパラメータで渡したidのユーザーを削除するAPIになっています。
DELETEリクエストにはtrue
が返ってきました。
もう一度GETリクエストでusersテーブルの中身を確認してみると、空のオブジェクト[]
が返ってきました。
以上です。
最後に
EclipseやIntellij IDEAではどれだけ早く作れるのか気になるので、挑戦をお待ちしています!!
-
※キーボードショートカットは初期設定のものを紹介しています。 ↩