[JAVA] Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL

La dernière fois, j'ai écrit l'article suivant. Exécutez l'application WEB avec Spring Boot + Thymeleaf

Cette fois, avec la même configuration, accédez à l'application Web de type REST et exploitez les données dans la base de données. Ce sera une application qui affiche une liste d'enregistrements de table sur l'écran qui s'affiche en premier, puis enregistre les données, met à jour les données existantes et supprime les données existantes de cet écran. En plus de celle de l'article précédent, la configuration utilise MySQL pour la base de données. Dans cet article, la procédure de construction de MySQL est omise. De plus, le mappeur O / R n'est pas utilisé pour la connexion DB, seul JDBC est utilisé.

Mac OS X 10.12 Java 1.8.0_92 Spring Tool Suite 3.8.4 Spring Boot 1.5.3 thymeleaf 2.1.5

Liste des API

Créez 5 API comme suit

NO METHOD url mouvement
1 GET /sample/ Voir tous les tableaux
2 GET /sample/:id id Se référer à 1 spécifié
3 POST /sample/ Enregistrement d'enregistrement
4 PUT /sample/:id 1 mise à jour d'enregistrement
5 DELETE /sample/:id Supprimer 1 enregistrement

partie commune

Construisez l'API ci-dessus dans "SampleController.java" utilisé dans l'article précédent. Créez une table appelée user dans MySQL et manipulez les données de la table avec REST.

DB

CREATE DATABASE mysql CHARACTER SET UTF8;
CREATE TABLE user (
  id int AUTO_INCREMENT,
  name varchar(254)
);
INSERT INTO user (id, name) VALUES (1, "kusakarikai");

Fichier d'ajout / correction 1.png

** Définition de la table utilisateur **

java:com.example.User.java


package com.example;

public class User {
	private int id;
	private String name;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

ActionForm

java:com.example.UserForm.java


package com.example;

public class UserForm {
	private String name;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

** OU définition de la carte ** Lorsque ResultSet.next () est bouclé avec while, le phénomène selon lequel le premier élément n'est pas lu ne peut pas être résolu et il est écrit directement avant la boucle.

java:com.example.UserMapper.java


package com.example;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.jdbc.core.RowMapper;

public class UserMapper implements RowMapper<List<User>> {
	public List<User> mapRow(ResultSet rs, int rowNum)
     throws SQLException {
		List<User> list = new ArrayList<>();
		User tmp_user = new User();
		tmp_user.setId(rs.getInt("id"));
		tmp_user.setName(rs.getString("name"));
		list.add(tmp_user);
		while (rs.next()) {
			User user = new User();
			user.setId(rs.getInt("id"));
			user.setName(rs.getString("name"));
			list.add(user);
		}
		return list;
	}
}

** Paramètres de connexion à la base de données **

src/main/resources/application.properties


spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Nom de la base de données
spring.datasource.username=Nom d'utilisateur
spring.datasource.password=mot de passe
spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver

** Paramètres de dépendance **

pom.xml


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

1 GET /sample/ Obtient tous les enregistrements de la table utilisateur et les affiche dans une liste.

Controller

java:com.example.SampleController.java


@Autowired
private JdbcTemplate jdbcTemplate;

@RequestMapping(path = "/sample", method = RequestMethod.GET)
String index(Model model) {
	List<User> list = jdbcTemplate.queryForObject("select * from user", new UserMapper());
	model.addAttribute("list", list);
	return "sample/index";
}

template

src/main/resources/templates/sample/index.html


<table class="list">
  <tr>
    <th>ID</th>
    <th>Nom</th>
  </tr>
  <tr th:each="list:${list}">
    <td th:text="${list.id}"></td>
    <td th:text="${list.name}"></td>
  </tr>
</table>

2 GET /sample/:id Obtient un enregistrement dans la table utilisateur.

Controller

java:com.example.SampleController.java


@Autowired
private JdbcTemplate jdbcTemplate;

@RequestMapping(path = "/sample/{id}", method = RequestMethod.GET)
String show(Model model, @PathVariable("id") int id) {
    List<User> list = jdbcTemplate.queryForObject("select * from user where id = ? ", new Object[] { id }, new UserMapper());
    model.addAttribute("list", list);
    return "sample/index";
}

template Omis (identique à NO1)

3 POST /sample Enregistrez l'entrée dans la table des utilisateurs. Après l'enregistrement, vous pouvez obtenir la liste en vous redirigeant vers l'API NO1 et l'afficher à l'écran.

Controller

java:com.example.SampleController.java


@Autowired
private JdbcTemplate jdbcTemplate;

@ModelAttribute
UserForm userForm() {
    return new UserForm();
}

@RequestMapping(path = "/sample", method = RequestMethod.POST)
String create(Model model, @ModelAttribute UserForm userForm) {
    jdbcTemplate.update("INSERT INTO user (name) values (?)", userForm.getName());
    return "redirect:/sample";
}

template

src/main/resources/templates/sample/index.html


<form method="post" name="create" action="/sample" accept-charset="UTF8">
    <input type="text" name="name"/>
    <input type="submit" value="s'inscrire" />
</form>

4 PUT /sample/:id Mettez à jour les détails d'enregistrement existants. Après l'enregistrement, vous pouvez obtenir la liste en vous redirigeant vers l'API NO1 et l'afficher à l'écran.

Controller

java:com.example.SampleController.java


@Autowired
private JdbcTemplate jdbcTemplate;

@ModelAttribute
UserForm userForm() {
    return new UserForm();
}

@RequestMapping(path = "/sample/{id}", method = RequestMethod.PUT)
String update(Model model, @ModelAttribute UserForm userForm, @PathVariable("id") int id) {
    jdbcTemplate.update("UPDATE user SET name = ? where id = ? ", userForm.getName(), id);
    return "redirect:/sample";
}

template

src/main/resources/templates/sample/index.html


<form method="post" action="/sample/:id">
    <input type="hidden" name="_method" value="put">
    <input type="text" name="name">
    <input type="submit">
</form>

5 DELETE /sample/:id Supprimez les détails d'enregistrement existants. Après l'enregistrement, vous pouvez obtenir la liste en vous redirigeant vers l'API NO1 et l'afficher à l'écran.

Controller

java:com.example.SampleController.java


@Autowired
private JdbcTemplate jdbcTemplate;

@RequestMapping(path = "/sample/{id}", method = RequestMethod.DELETE)
String destory(Model model, @PathVariable("id") int id) {
    jdbcTemplate.update("delete from user where id = ? ", id);
    return "redirect:/sample";
}

template

src/main/resources/templates/sample/index.html


<a href="javascript:void(0);" onclick="destory_func();">Effacer</a>
function destory_func() {
    var form = document.createElement("form");
    var hidden = document.createElement("input");
    form.method = "post";
    form.action = "/sample/" + id;
    hidden.type = "hidden";
    hidden.name = "_method"
    hidden.value = "delete";
    form.appendChild(hidden);
    document.body.appendChild(form);
    form.submit();
}

Comme mentionné ci-dessus, nous avons implémenté un contrôleur et un modèle selon 5 API. Je continue en regardant quelques livres et programmes cadres, mais il est intéressant d'avoir une vue d'ensemble du logiciel petit à petit à partir de l'intention de mise en œuvre.

Cet article n'a extrait que les pièces nécessaires au fonctionnement, mais la source est ci-dessous, donc si vous en avez besoin, veuillez. github kaikusakari/spring_crud

Recommended Posts

Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Implémenter GraphQL avec Spring Boot
Créez une application CRUD avec Spring Boot 2 + Thymeleaf + MyBatis
Implémentez un CRUD simple avec Go + MySQL + Docker
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Télécharger avec Spring Boot
Essayez d'implémenter la fonction de connexion avec Spring Boot
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
Hello World avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
[Java] Thymeleaf Basic (Spring Boot)
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Connectez-vous à la base de données avec spring boot + spring jpa et effectuez l'opération CRUD
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Utiliser l'authentification de base avec Spring Boot
Implémenter le lien texte avec Springboot + Thymeleaf
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Implémenter le téléchargement de fichiers avec Spring MVC
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Implémenter l'API REST avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
Implémenter l'application Spring Boot dans Gradle
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
Certification / autorisation avec Spring Security & Thymeleaf
Comment utiliser Thymeleaf avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
Effectuer un test de confirmation de transaction avec Spring Boot