3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

本稿では、TODOアプリケーションのファイル構成や環境構築について記載をしていきます。また、実装する上で知っておいた方がよい知識もまとめてみました。
実装は次の投稿からはじまり、本稿は知識を入れるための読み物の位置づけです。

今回TODOアプリケーションを実装するファイル構成

今回のTODOアプリケーションのファイル構成は以下の通りです。

ファイル構成
tutorialTodoApplication
	|-src/main/java
		|-com.example.demo
		 |-ServletInitializer.java
		 |-TutorialTodoApplication.java
		|-com.example.demo.common
		 |-Constants.java
		|-com.example.demo.controller
		 |-TaskController.java
   		 |-GlobalAdviceController.java
		|-com.example.demo.entity
		 |-Task.java
		|-com.example.demo.form
		 |-TaskForm.java
		|-com.example.demo.mapper
		 |-TaskMapper.java
		|-com.example.demo.repository
		 |-TaskRepository.java
		|-com.example.demo.service
		 |-TaskService.java
		 |-TaskServiceImpl.java
	|-src/main/resources
		|-com
		 |-exmple
		  |-demo
		   |-mapper
			|-TaskMapper.xml
		|-static
		|-templates
	      	 |-task
		  |-complete.html
		  |-confirm.html
		  |-deleteConfirm.html
		  |-edit.html
		  |-index.html
    		|-systemError.html
		|-application.properties
		|-messages.properties

Controller:
役割: ユーザーからのHTTPリクエストを受け取り、適切なServiceクラスのメソッドを呼び出して、結果をユーザーに返す。
例: TaskController.java

Service:
役割: ビジネスロジックを実装するクラス。Controllerからのリクエストを受けて、Repositoryを通じてデータベースにアクセスし、結果を返す。
例: TaskService.java

Repository:
役割: データベースへのアクセスを抽象化するクラス。MyBatisのMapperを呼び出してデータベースとの対話を行う。
例: TaskRepository.java

Mapper:
役割: MyBatisで使用されるSQLクエリをマッピングするインターフェース。データベースとの通信を行うメソッドを提供する。
例: TaskMapper.java

Form:
役割: ユーザーからの入力データを受け取り、ControllerやServiceで処理しやすい形に変換する。バリデーションのためのデータ構造もここで定義することがあります。
例: TaskForm.java

Entity:
役割: データベースのテーブルと1:1で対応するクラス。各属性はテーブルのカラムにマッピングされ、Repositoryを通じてデータベースとやり取りする。
例: TaskEntity.java

これらのクラスの連携によりControllerがユーザーのリクエストをServiceに渡し、ServiceがRepositoryを通じてデータベースと通信し、最終的にデータがユーザーに返されるという一連のプロセスが実現されます。各クラスはそれぞれの責務を持ち、コードが整理されて保守性が向上します。

実装方針

TODOアプリケーションの実装全体像は以下の通りです。

まず、ControllerクラスではHTTPリクエストを受け取り、適切な処理を行います。リクエストに応じて適切なServiceクラスのメソッドを呼び出し、必要なデータを取得します。その後、取得したデータをビューに渡して、適切なHTMLファイルを返します。

Serviceクラスでは、ビジネスロジックを実装します。リクエストに対するデータの操作や処理を行い、Repositoryクラスを介してデータベースとのやり取りを行います。この際、ビジネスロジックがControllerクラスから切り離されるため、コードの再利用性や保守性が向上します。

Repositoryクラスでは、データベースとのやり取りを担当します。MyBatisを使用してSQLクエリを実行し、データの永続化や取得、更新、削除などの操作を行います。また、Mapperクラスを介してSQLクエリを定義し、Repositoryクラスから呼び出します。

実装の流れは、まずControllerクラスから始めて、リクエストに対する処理を実装します。次に、Serviceクラスでビジネスロジックを実装し、必要なデータの操作を行います。その後、Repositoryクラスを記載し、mapperクラスの実装を行います。その結果。データベースとのやり取りを行うことになります。最後に、HTMLファイルを作成し、thymeleafをhtmlにマージしていきます。

環境構築

以下のブログを参考にしてください。

Springboot+MyBatisの環境構築/HelloWorldの出力
https://qiita.com/aki_number16/items/bfb24542e41f6d21cac7

スキーマ・テーブルの作成

workbenchでスキーマを作成しましょう。
MySQLでテーブルを作成する
https://qiita.com/aki_number16/items/1e1ee12aa98893e54677

テーブル作成

2.設計からテーブルを作成しましょう。テーブルを作成するDDLはこちらになります。

CREATE TABLE `tutorialtodoapplication`.`task` (
  `taskId` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(100) NOT NULL,
  `description` VARCHAR(200) NULL,
  `deadline` DATETIME NOT NULL,
  `status` INT NOT NULL,
  `userId` INT NULL,
  `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `deleteFlg` TINYINT NULL,
  PRIMARY KEY (`taskId`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

EclipseからのDB接続

application.propertiesに以下のように記入します。usernameとpasswordはDBのインスタンスにログインする際に使うものです。

spring.datasource.url=jdbc:mysql://localhost/tutorialTodoApplication
spring.datasource.username=XXXXXX
spring.datasource.password=XXXXXX
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.configuration.map-underscore-to-camel-case=true

「スキーマ・テーブルの作成」を参考に、MySQL WorkbenchでCreate tableを実行します。実行したら、テーブルが作成できているか確認しましょう。テーブル定義を確認できるSQLはこちら。

desc todoapplication.task;

Workbenchを使用する場合は、テーブルだけではなく、スキーマ名も指定しないといけません。他のSQL──例えば、selectなどでもテーブル名を指定するときは、「スキーマ名.テーブル名」という形で表現します。

Mybatisを使用して、Mapper.xmlにSQLを書くときは、テーブル名にスキーマ名をつけません。スキーマ名をつけるのはworkbenchで操作するときだけの対応になるので、忘れないようにしましょう。

SQLを用いた定義変更時の確認方法について
SQLでテーブルの定義を操作するときは、①操作前の状態を確認、②定義の変更、③操作後の状態を確認 というような流れでSQLを打っていきます。例えば、一度 create tableでテーブルを作成した後に、titleの桁数を変更するとします。その時、mysql workbenchに接続したうえで、以下のような操作を行います。

1.操作前の状態を確認
desc でtitleが100であることを確認します。

desc todoapplication.task;

2.定義の変更
ALTER TABLEで、桁数を変更します。

ALTER TABLE tasks
MODIFY COLUMN title VARCHAR(120) NOT NULL;

3.操作後の状態を確認
desc でtitleが120であることを確認します。

desc todoapplication.task;

なぜこのような手順を踏むのでしょうか。それは、「2.定義の変更」の操作だけだと、本当にこの操作で変更できているのか、見た目から確認ができないからです。そのため、テーブル変更の前後でテーブルを確認し、「変更したい部分が変わっていること」を確認します。

時間があるときに読むとよさそうな記事たち

参考になりそうな記事を集めてみました。

プロになるためのWeb技術入門をまとめてみた
https://qiita.com/Marusoccer/items/585a191f4d44c4b75386

Thymeleaf 3.0を使用した入力フォームのサンプル
https://qiita.com/rubytomato@github/items/8da1bb19537bbfc9c2ea

【バックエンド】駆け出しエンジニアが目指すジュニアレベルのエンジニアとは【2024年版】
https://qiita.com/mamimami0709/items/fd6556707e4b924c65ab

【入門】事例で学ぶ基本設計
https://qiita.com/KNR109/items/5d545903ec7fef85cd37

プログラミング勉強を加速させる7つの習慣
https://qiita.com/YudaiTsukamoto/items/42a8df22ca4c6b327dfd

【11万文字越え】プログラミング初心者に贈る即戦力ガイド
https://qiita.com/nuco_bk/items/27f5ad03d0c4b41241fc

あなたはブラウザについてどこまで説明できますか?
https://qiita.com/S4nTo/items/cb9e486749516034d1bd

何かのときにすっと出したい、プログラミングに関する法則・原則一覧
https://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63

【SIer新人向け】研修では教えてくれないノウハウ集
https://qiita.com/old-stone/items/6221824566116710453f

「ビジネスロジック」とは何か、どう実装するのか
https://qiita.com/os1ma/items/25725edfe3c2af93d735

新人研修でドヤ顔で披露したらウケたEclipseのショートカット集
https://qiita.com/arai-wa/items/c2eb7387b5bf37b4ace4

【初心者向け】今度こそわかるDI〜DIの基礎とSpringにおけるDI〜
https://qiita.com/rebi/items/31169e5bcd64b4411f19

デザインパターン
https://www.techscore.com/tech/DesignPattern/

リファレンス
https://docs.spring.io/spring-boot/docs/3.2.0/reference/htmlsingle/#getting-started

初心者でもわかる!Javadocの意味と書き方【サンプルあり】
https://style.potepan.com/articles/15252.html

GETとPOSTの違いについて
https://qiita.com/kanataxa/items/522efb74421255f0e0a1

要件定義~システム設計ができる人材になれる記事
https://qiita.com/Saku731/items/741fcf0f40dd989ee4f8

【Eclipse】よく使うショートカットキー10選
https://qiita.com/orangecarol/items/9b2e7e4fc9c0125092e7

次の投稿では、一覧機能の実装を行っていきます。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?