👌
Springboot/Mybatis/RESTAPI/axios 編集中
Intellij IDEA使用 設定→ラグイン→Mybatisxを有効に。
Springboot
java JDK17
Springboot ビルドツール:Mavenではなくbuild.gradle使用
Mybatisとは、データベースにアクセスするフレームワーク
MySQL
vscode
※バックエンドとクライアントのhostが分かれている前提で進めます。
ディレクトリ構成
src/
└── main/
├── java/
│ └── pairWork/
│ ├── api/
│ │ ├── entity/
│ │ ├── repository/
│ │ ├── service/
│ │ └── controller/
│ └── ...
└── resources/
└── application.properties
└── mapper/
└── TaskMapper.xml
テーブル作成
CREATE TABLE task (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
task_name VARCHAR(255) NOT NULL COMMENT 'タスク名',
task_detail TEXT COMMENT 'タスク詳細',
status INT NOT NULL COMMENT 'ステータス',
expiration_date DATE COMMENT '期限日',
registration_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日',
updated_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日',
man_hour INT COMMENT '工数'
);
テーブルにテストデータとして値を格納
INSERT INTO task (task_name, task_detail, status, expiration_date, registration_date, updated_date, man_hour)
VALUES
('タスク1', 'デザインを完成させる', 1, '2024-11-25', '2024-11-18 09:00:00', '2024-11-18 09:00:00', 8),
('タスク2', 'クライアントミーティング準備', 2, '2024-11-27', '2024-11-18 10:00:00', '2024-11-18 10:00:00', 4),
('タスク3', 'プロジェクト仕様書の確認', 1, '2024-11-30', '2024-11-18 11:00:00', '2024-11-18 11:00:00', 12),
('タスク4', 'バックエンドAPIの設計', 3, '2024-12-05', '2024-11-18 12:00:00', '2024-11-18 12:00:00', 15),
('タスク5', 'ユニットテストケース作成', 2, '2024-11-28', '2024-11-18 13:00:00', '2024-11-18 13:00:00', 6),
('タスク6', 'コードレビューの実施', 1, '2024-11-29', '2024-11-18 14:00:00', '2024-11-18 14:00:00', 3),
('タスク7', '開発サーバーのセットアップ', 3, '2024-12-01', '2024-11-18 15:00:00', '2024-11-18 15:00:00', 10),
('タスク8', 'UIモックアップの作成', 2, '2024-11-26', '2024-11-18 16:00:00', '2024-11-18 16:00:00', 5),
('タスク9', 'ログ収集システムの導入', 1, '2024-11-30', '2024-11-18 17:00:00', '2024-11-18 17:00:00', 8),
('タスク10', '月次レポート作成', 3, '2024-11-24', '2024-11-18 18:00:00', '2024-11-18 18:00:00', 7);
Taskmapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper.xmlファイルの宣言とDTDの指定。
MyBatisで使用するためのファイルで、DTDによってXMLの構造を定義します。 -->
<!--<mapper namespace="com.example.mapper.TaskMapper">-->
<mapper namespace="pairWork.api.repository.mapper.task.TaskMapper">
<!-- <mapper>タグは、SQL文とJavaのMapperインターフェースを関連付けるルート要素。
namespace属性に、対応するJavaのMapperインターフェースの完全修飾名を指定します。 -->
<!-- タスクの条件検索 -->
<!-- タスクをステータスや期限日で検索するSQLクエリを記述する -->
<select id="findAll" resultType="pairWork.api.entity.Task">
SELECT
id,
task_name,
task_detail,
status,
expiration_date,
registration_date,
updated_date,
man_hour
FROM task
</select>
entity
entity(モデル層)
package pairWork.api.entity;
import java.util.Date;//データ型
import lombok.Data;//Lombokの@Dataアノテーションをクラスに付けることで、以下のような基本的なコードを自動生成してくれます
@Data
public class Task {
private int id; // タスクID
private String taskName; // タスク名
private String taskDetail; // タスク詳細
private int status; // ステータス
private Date expirationDate; // 期限日
private Date registrationDate; // 登録日
private Date updatedDate; // 更新日
private int manHour; // 工数
}
repository mapper(インターフェイス)
細かく条件IDなどの取得ではなく簡易なfindAll();でデータをとりあえず全て取得できるように全検索
TaskRepository.java
package pairWork.api.repository;
import java.util.List;
import pairWork.api.entity.Task;
import pairWork.api.entity.Todo;
import pairWork.api.service.output.task.TaskSearchServiceInput;
public interface TaskRepository {
List<Task> findAll();
void register(Task entity);
}
repositoryクラスをマッピングする理由は後ほど追記
Taskmapper.java
package pairWork.api.repository.mapper.task;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
//import org.apache.ibatis.annotations.Param;
import pairWork.api.entity.Task;
@Mapper
public interface TaskMapper {
List<Task> findAll();
TaskDatasource
TaskDatasource が、TaskRepository インターフェースを実装している部分
TaskDatasource.java
package pairWork.api.repository.datasource;
import pairWork.api.entity.Task;
import pairWork.api.repository.TaskRepository;
import pairWork.api.repository.mapper.task.TaskMapper;
import java.util.List;
public class TaskDatasource implements TaskRepository {
private static TaskMapper taskMapper;
@Override
public List<Task> findAll(){
return taskMapper.findAll();
}
@Override
public void register(Task entity) {
}
}
service(サービス層ビジネスロジック)
Taskservice.java
//serviceの実装
controller (ApiResult)
TaskContoroller.java
webクライアント(axios)
task.tsx
Discussion