1.環境
(1)開発環境
OS: Windows 10 Pro
IDE:Eclipse IDE for Enterprise Java Developers Version: 2020-12 (4.18.0)
Java version:11.0.9、Tomcat v8.0
(2)データベース
XAMPPのmysql
mysql Ver 15.1 Distrib 10.4.17-MariaDB, for Win64 (AMD64)
2.アプリケーションの概要
データベースに対して、ユーザー名の登録、参照、更新、削除を行う。
3.設計
(1)CRUD表
(2)ER図
(3)クラス図
(4)シーケンス図
4.実装
(1)プロジェクトフォルダ作成
ファイル>新規>その他を選択し、「ウイザードを選択」画面を表示
「Springスタータ・プロジェクト」を選択
ライブラリの選択
(2)プロパティファイルの編集
Mysqlの接続情報を書く
(3)ソースファイル
テンプレート
index.html(ユーザー管理画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>メニュー</title>
</head>
<body>
<h2>【ユーザー管理】</h2>
<form action="mypage" method="post">
<input type="submit" name="menu1" value="「ユーザー登録」" style="width:200px;height:50px;margin:10px"><br>
<input type="submit" name="menu2" value="「ユーザー一覧」" style="width:200px;height:50px;margin:10px">
</form>
</body>
</html>
UserReghist.html(ユーザー登録画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登録</title>
</head>
<body>
<h2>【ユーザー登録】</h2>
<form action="userreghist" method="post">
名前:<input type="text" name="user_name"><br>
<input type="submit" name="enter" value="登録">
<input type="submit" name="back" value="戻る">
</form>
</body>
</html>
UserList.html(ユーザー一覧画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー一覧画面</title>
<style type="text/css">
/* 基本のテーブル定義 */
.t {border:1px solid #000000;border-collapse:collapse;table-layout:fixed;font-size:16px}
.t td{border:1px solid #000000;height:16px;}
.t th{border:1px solid #000000;font-size:16px}
.t th{background-color:#FFBB88;color:#000000;}
.t tr:nth-child(odd) td{background-color:#C8C8E8;color:#000000;}
.t tr:nth-child(even) td{background-color:#E8E8FF;color:#000000;}
.t1{width:550px;}
.t2{width:50px}
.fixed{position: sticky;
top: 0;}
#data {
overflow-x:scroll;overflow-y:scroll;
width:700px;height:245px;
}
</style>
</head>
<body>
<h2>【ユーザー一覧】</h2>
<div id="data">
<table class=t>
<tr>
<th class="t1 fixed">名前</th>
<th class="t2 fixed">ボタン</th>
<th class="t2 fixed">ボタン</th>
<th class="t2 fixed">ID</th>
</tr>
<tr th:each="entity : ${data}">
<td class="t1" th:text="${entity.user_name}"></td>
<td>
<form th:action="userlist" name="ref" method="post" >
<input type="submit" name="ref" class="t2" value="変更">
<input type="hidden" name="user_id" th:value="${entity.user_id}">
</form>
</td>
<td>
<form th:action="userlist" method="post" >
<input type="submit" name="del" class="t2" value="削除">
<input type="hidden" name="user_id" th:value="${entity.user_id}">
</form>
</td>
<td class="t2" th:text="${entity.user_id}"></td>
</tr>
</table>
</div>
<form th:action="userlist" method="post" >
<input type="submit" name="back" value="戻る">
</form>
</body>
</html>
UserUpdate.html(ユーザー変更画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー変更</title>
</head>
<body>
<h2>【ユーザー変更】</h2>
<form th:action="userupdate" th:object="${data}" method="post">
名前:<input type="text" name="user_name" th:field="*{user_name}">
<input type="hidden" name="user_id" th:field="*{user_id}"><br>
<input type="submit" name="enter" value="登録">
<input type="submit" name="back" value="戻る">
</form>
</body>
</html>
OK.html(登録成功確認画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登録確認画面</title>
</head>
<body>
<h2>【登録確認】</h2>
<p th:text="${user_name}"/>さん登録しました
<form action="userreghist" method="post">
<input type="submit" name="back" value="確認" style="width:200px;height:50px;margin:10px"><br>
</form>
</body>
</html>
DelOK.html(削除成功確認画面)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>削除確認画面</title>
</head>
<body>
<h2>【削除確認】</h2>
<p th:text="${user_id}"/>さん削除しました<br>
<form action="delok" method="post">
<input type="submit" name="back" value="確認" style="width:200px;height:50px;margin:10px"><br>
</form>
</body>
</html>
UserCnt.java(コントローラ)
package com.example.demo;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class UserCnt {
@Autowired
DataEntityRepository repository;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index";
}
@RequestMapping(value = "mypage", params = "menu1", method = RequestMethod.POST)
public String mypage1(Model model) {
return "UserReghist";
}
@RequestMapping(value = "mypage", params = "menu2", method = RequestMethod.POST)
public String mypage2(Model model) {
//データベースから一覧取得して、オブジェクトに入れる
List<DataEntity> data = repository.findAll();
//テンプレートで表示する値をセット
model.addAttribute("data",data);
return "UserList";
}
@RequestMapping(value = "userreghist", params = "enter", method = RequestMethod.POST)
public String userreghist1(
@RequestParam("user_name")String u_name,
Model model) {
//テンプレートで表示する値をセット
model.addAttribute("user_name", u_name);
//DBに1レコード保存する
repository.save(new DataEntity(u_name));
return "OK";
}
@RequestMapping(value = "userreghist", params = "back", method = RequestMethod.POST)
public String userreghist2(Model model) {
return "index";
}
@RequestMapping(value = "userlist", params = "ref", method = RequestMethod.POST)
public String userlist1(
@RequestParam Integer user_id,
Model model) {
//データベースから検索取得して、オブジェクトに入れる
Optional<DataEntity> data = repository.findById(user_id);
//テンプレートで表示する値をセット
model.addAttribute("data",data);
return "UserUpdate";
}
@RequestMapping(value = "userlist", params = "del", method = RequestMethod.POST)
public String userlist2(@RequestParam Integer user_id,
Model model) {
//テンプレートで表示する値をセット
model.addAttribute("user_id", user_id);
//DBから削除する
repository.deleteById(user_id);
return "DelOK";
}
@RequestMapping(value = "userlist", params = "back", method = RequestMethod.POST)
public String userlist3(Model model) {
return "index";
}
@RequestMapping(value = "userupdate", params = "enter", method = RequestMethod.POST)
public String userupdate1(@RequestParam Integer user_id,
@RequestParam String user_name,
Model model) {
//テンプレートで表示する値をセット
model.addAttribute("user_name", user_name);
repository.save(new DataEntity(user_id,user_name));
return "OK";
}
@RequestMapping(value = "userupdate", params = "back", method = RequestMethod.POST)
public String userupdate2(Model model) {
return "index";
}
@RequestMapping(value = "delok", params = "back", method = RequestMethod.POST)
public String delok(Model model) {
return "index";
}
}
使用したアノテーション
@Controller
コントローラとして認識され、returnで指定したテンプレートをレンダリングして表示する
@Autowired
インスタンスを生成する
@RequestMapping
マッピングするアドレスの指定とGET/POSTメソッドの種類を指定
@RequestParam
送信される項目の名前をもつパラーメータ値を割り当てる
DataEntity.java(エンティティクラス)
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class DataEntity {
@Id
@GeneratedValue
private Integer user_id;
private String user_name;
public DataEntity() {
super();
}
public DataEntity(Integer user_id) {
super();
this.user_id = user_id;
}
public DataEntity(String user_name) {
super();
this.user_name = user_name;
}
public DataEntity(Integer user_id, String user_name) {
super();
this.user_id = user_id;
this.user_name = user_name;
}
public Integer getUser_id() {
return user_id;
}
public void setUser_id(Integer user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
@Override
public String toString() {
return "DataEntity [user_id=" + user_id + ", user_name=" + user_name + "]";
}
}
使用したアノテーション
@Entity
エンティティクラスとして認識される
@Id
プライマリキーを指定
@GeneratedValue
自動的に値が生成される
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DataEntityRepository extends JpaRepository<DataEntity, Integer> {
}
DataEntityRepository.java(JpaRepositoryインターフェース)
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DataEntityRepository extends JpaRepository<DataEntity, Integer> {
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>Crud_Springsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Crud_Springsample</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(4)データベースとテーブル作成
データベースは自動的に作成される
データベース名:crud_sample
テーブル名:data_entity(フィールド値を保存)
hibernate_sequence(シーケンス番号を保存)
5.実行
(1)XAMPPのMySQLサーバを起動する
(2)アプリケーションを選択して、実行ボタン>「SpringBootアプリケーション」を押す
(3)ブラウザからWebサーバに接続
http://localhost:8080/
「ユーザー登録」ボタン押下
名前:テストネームを入力し、「登録」ボタン押下
「ユーザー管理」画面で「ユーザー一覧」ボタン押下
「変更」ボタン押下
「削除」ボタン押下
The subject ends herewith.