スポンサーリンク

【SpringBoot】dtoとは?

Java
スポンサーリンク

今回の記事はSpringBootのdtoとは?という疑問に答える記事です。SpringBootはWeb開発をJavaで行う場合、非常に便利なフレームワークです。開発を行う際のディレクトリ構成やレイヤーの役割を押さえておくと開発効率的にもよいので、SpringBoot勉強中の方は是非参考にしてみてください。

また、SprtingBootの各ディレクトリ構成に関する記事や各ディレクトリの役割も別記事にまとめいているので是非参考にしてみてください。

スポンサーリンク

SpringBootにおけるdtoとは?

dtoとは文字で説明すると「レイヤー間でのデータを扱う。」と説明している記事が多いです。

どういうことかというとSpringBootのレイヤーについて理解しておく必要があると思います。

SpringBootのレイヤーは主要処理のみでいうと下記です。

  1. controller:serviceを呼び出す
  2. service:ロジック関連処理+repositoryを呼んでDB操作の管理
  3. repository:mapperを呼んでDB操作の管理
  4. mapper:SQL実行

controllerからserviceを呼ぶなどのレイヤー間のデータの受け渡しを行う際に一旦入れるオブジェクトとして、dtoがあります。インスタンスを作成し、メソッドを使用します。

図で表すと下記のようにレイヤー間でのデータ受け渡しに使用されます。

ちなみにdtoの正式名称は「Data Transfer Object」で頭文字を取ってdtoです。

formとentityもデータの受け渡し用と考えると、似ていますが、それぞれ、使用される場所が異なりますので注意しましょう。

SpringBootにおけるdtoの実装

実際にコードでformを表現すると下記のようになります。

package com.example.demo.dto;

import lombok.Data;

@Data
public class SampleDto {
	// ID
	private Integer id;

	// 名前
	private String name;

	// 年齢
	private Integer age;
}

dtoはentityの要素+画面固有の要素(Serviceなどで認証などに使用するものなど)で作成されます。

「@Data」のアノテーションはgetterとsetterを自動で定義してくれるものです。

formからdtoへ変換を行うcontroller、entityからdtoに変換を行うrepositoryもあわせてみていきましょう。

@PostMapping("/regist")
	public String registUser(@ModelAttribute SampleForm sampleForm, Model model) {

		// formからdtoに置き換え
		SampleDto dto = new SampleDto();
		dto.setName(sampleForm.getName());
		dto.setAge(sampleForm.getAge());

		// 登録処理
		service.registUser(dto);

		// 一覧取得
		List<SampleDto> result = service.getUserList();
		model.addAttribute("sampleList",result);

		return "sampleList";

	}
// インサート
	public Integer insertUser(SampleDto dto){

		// dtoからentityに置き換え
		User1 user1 = new User1();
		user1.setName(dto.getName());
		user1.setAge(dto.getAge());

		Integer result = mapper.insert(user1);

		return result;
	}

全体的な流れはひとつ前の章に貼った画像を参考にしてください。

さらにプロジェクト内でどのようにdtoが使用されているかを知りたい方は下記記事で各レポジトリの役割とサンプル的なアプリコードがありますので、そちらでentityの流れを追ってみてください。

【SpringBoot】ディレクトリ構成と各ディレクトリの役割ご紹介。

では、今回の記事は以上です。ほかにもSpringBoot関連の記事を記載しているので、是非参考にしてみてください。

コメント

タイトルとURLをコピーしました