Spring Bootのフォームとエンティティの連携のサンプルです。
目次
サンプル | 環境 |
1.ビューのファイル(index.html) | |
2.フォームのクラス(Test1Form.java) | |
3.エンティティのクラス(Syain.java) | |
4.コントローラのクラス(MainController.java) | |
5.レポジトリのクラス(SyainRepository.java) |
環境
Syain.Javaがエンティティで、Test1Form.javaがフォームです。
流れは以下です。
1.画面で値を入力しする
2.「フォーム」に値がセットされる
3.「フォーム」の値を「エンティティ」にセットする
4.「エンティティ」の値でデータベースに登録する
1.ビューのファイル(index.html)
ビューのファイルです。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body >
<form method="post" action="#" th:action="@{/test1/testform}" th:object="${test1Form}">
<p><input type="text" id="id" name="id" th:field="*{id}"/></p>
<p><input type="text" id="name" name="name" th:field="*{name}"></p>
<p><input type="submit" value="送信ボタン"></p>
</form>
</body>
</html>
8行目は、formでmethodはpostです。
10,13行目は、テキストボックスです。
15行目は、submitボタンです。
2.フォームのクラス(Test1Form.java)
フォームのクラスです。
package com.example.demo;
public class Test1Form {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4行目はIDで、5行目はnameです。
「@NotNull(message="必須項目です")」等の入力チェックを入れる場合はここに入れます。
7行目以降はゲッターとセッターです。
3.エンティティのクラス(Syain.java)
エンティティのクラスです。
package com.example.demo;
public class Syain {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
フォームと同じく4行目はIDで、5行目はnameです。
7行目以降はゲッターとセッターです。
4.コントローラのクラス(MainController.java)
コントローラのクラスです。
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/test1")
public class MainController {
@Autowired
private SyainRepository syainRepository;
@GetMapping("/")
public String disp1(
Model model) {
model.addAttribute("test1Form", new Test1Form());
return "test1/index";
}
@PostMapping("/testform")
public String disp2(Test1Form test1Form) {
Syain syain = new Syain();
syain.setId(test1Form.getId());
syain.setName(test1Form.getName());
syainRepository.insertSyain(syain);
return "redirect:/test1/";
}
}
15~20行目は、初回アクセス時の画面を表示します。
22行目以降は、ビューの画面で送信ボタン押下時に実行されます。
23行目に画面から入力された項目のフォームがあります。
24行目は、エンティティのインスタンスを作成します。
25,26行目は、フォームから値を取得し、エンティティにセットしています。
27行目は、レポジトリで登録処理を行います。
28行目は、リダイレクトでフォームの値の二重送信を防止しています。
5.レポジトリのクラス(SyainRepository.java)
レポジトリのクラスです。SQLを実行します。
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class SyainRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public SyainRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void insertSyain(Syain syain) {
jdbcTemplate.update("INSERT INTO syain(id,name) Values(?,?)",
syain.getId(),syain.getName());
}
}
16行目は、insert文です。
クエスチョンマーク(?)は、プレースホルダです。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
関連の記事