[JAVA] [Exemple de code Spring inclus] Comment créer un formulaire et comment obtenir plusieurs enregistrements

Comment créer un formulaire et comment obtenir plusieurs enregistrements

Il est expliqué dans l'ordre selon la classe de base.

Le code est publié sur GitHub, donc si vous êtes intéressé, veuillez le cloner. Cliquez ici pour le référentiel GitHub

Cet environnement

Tous les outils sont gratuits. Si vous pouvez travailler avec SQL dans le terminal, vous n'avez pas besoin d'outils SQL.

Base de données

GitHub a des fichiers sql pour la création de base de données et la recherche de données. Veuillez exécuter en fonction de l'environnement.

HTML Bien qu'il soit décrit comme «th: value» dans la balise HTML, il sera expliqué plus tard.

Créer un formulaire de recherche

form.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"></meta>
        <title>Effectuez une recherche dans la base de données</title>
    </head>
    <body>
        <h1>Formulaire de recherche</h1>
        <form method="post" action="/form/db">
Entrez l'identifiant de l'employé:<input type="text" name="Id" th:value="${id_value}" /><br>
Entrez votre nom:<input type="text" name="Name" th:value="${name_value}" /><br>
Entrée d'âge:<input type="text" name="Age" th:value="${age_value}" /><br>
            <input type="submit" value="Chercher" />
        </form>
    </body>
</html>

Créer une page pour afficher les résultats

responseDB.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"></meta>
        <title>Essayez de chercher dans la base de données</title>
    </head>
    <body>
        <h1>Afficher les résultats de la recherche</h1>
        <table>
            <tr th:each="employee : ${employees}">
                <td th:text="${employee.employeeId}"></td>
    	        <td th:text="${employee.employeeName}"></td>
    	        <td th:text="${employee.empoyeeAge}"></td>
            </tr>
        </table>
    </body>
</html>

Java Les quatre classes suivantes sont requises pour créer un service Web.

--Classe de référentiel --Classe de domaine

spring基本.jpg

Article sur les annotations à venir

Classe de référentiel

FormRepository.java


package com.example.demo;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class FormRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public List<Map<String, Object>> findData(Integer id, String name, Integer age) {

        String query = "SELECT"
            + " employee_id,"
            + " employee_name,"
            + " age"
            + " FROM employee"
            + " WHERE employee_id=?"
            + " or employee_name LIKE ?"
            + " or age=?";

        //Exécution de la recherche
        // queryForList =>Puisqu'il y a plusieurs résultats de recherche, obtenez-les dans la liste
        List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, new Object[] {id, name, age});
        return employees;
    }
}

Telle est la réponse à la question principale. Utilisez new Object.

jdbcTemplate.queryForList(query, new Object[] {id, name, age});

Classe de domaine

Employee.java


package com.example.demo;

import lombok.Data;

@Data
public class Employee {

    private int employeeId;
    private String employeeName;
    private int employeeAge;
}

Si vous utilisez l'annotation @ Data, getter et setter seront créés automatiquement, il sera donc plus facile à modifier. Article sur @Data à venir

Classe de service

FormService.java


package com.example.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class FormService {
    
    @Autowired
    private FormRepository formRepository;

    //Depuis que j'ai obtenu le résultat de l'inspection en tant que type de liste dans la classe de référentiel pour obtenir plusieurs résultats de recherche
    //Classe de domaine où les données sont stockées[Employee]En tant que type de liste
    public List<Employee> findData(Integer id, String name, Integer age) {

        //De la classe référentiel[findData]Met la carte dans la liste, alors obtenez-la avec le même type
        List<Map<String, Object>> list = formRepository.findData(id, name, age);
    
        //Générer une liste de valeurs de retour de findData
        List<Employee> employees = new ArrayList<Employee>();

        //De la classe référentiel[findData]Liste des résultats de recherche de
        //Un par un dans la classe de domaine[Employee]Stocker dans
        for(Map<String, Object> map: list) {

            int employeeId = (Integer)map.get("employee_id");
            String employeeName = (String)map.get("employee_name");
            int employeeAge = (Integer)map.get("age");

            //Créer une instance Employee
            Employee employee = new Employee();
        
            //Stocker la valeur dans le setter généré automatiquement de la classe de domaine
            employee.setEmployeeId(employeeId);
            employee.setEmployeeName(employeeName);
            employee.setEmployeeAge(employeeAge);

            employees.add(employee);
        }
 
        return employees;
    }
}

Par défaut, les noms de getter et setter sont en majuscules avec la première lettre du nom de la variable. Ce sera celui avec get et set.

employee.setEmployeeId(employeeId);

Classe de contrôleur

FormController.java


package com.example.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.RequestParam;

@Controller
public class FormController {

    @Autowired
    private FormService formService;

    @GetMapping("/form")
    public String getHello() {
        // hello.Transition de l'écran vers HTML
        return "form";
    }
    
    //Rechercher une destination d'action de formulaire
    @PostMapping("/form/db")
    public String postDbReqest(
        @RequestParam("Id")String Id,
        @RequestParam("Name")String Name,
        @RequestParam("Age")String Age, Model model) {

        Integer id = (Id == "") ? null:Integer.parseInt(Id);
        String name = (Name == "") ? "":Name;
        Integer age = (Age == "") ? null:Integer.parseInt(Age);

        //Classe de service[findData]Est dans la liste des classes de domaine[Employee]Parce qu'il est stocké
        //Liste lors de la réception<Employee>
        List<Employee> employees = formService.findData(id, name, age);

        //Employés internes
        // {"employeeId":1, "employeeName":"Yamada Taro", "employeeAge":30}
        model.addAttribute("employees", employees);
            
        return "responseDB";
    }
}

Description de html

Étant donné que les «employés» enregistrés dans le modèle contiennent plusieurs «classes d'employés»

<tr th:each="employee : ${employees}">  

Extrait un par un des «employés» et assigné à «l'employé»

ʻEmployee class` est

private int employeeId;  
private String employeeName;  
private int employeeAge;  

Puisque la valeur a été stockée à l'aide de setter dans la classe de référentiel, elle peut être récupérée comme suit.

<td th:text="${employee.employeeId}"></td>  
<td th:text="${employee.employeeName}"></td>  
<td th:text="${employee.empoyeeAge}"></td>

Exemple d'échec de la définition de la valeur de recherche

Il n'y a qu'un seul résultat de recherche dans le livre, afin d'acquérir plusieurs données Je sais que j'utilise queryForList, mais même si j'écris une instruction SQL avec un espace réservé Un problème est survenu en raison du fait que la valeur de recherche n'a pas pu être liée.

Classe de référentiel

Succès

//Exécution de la recherche
// queryForList =>Puisqu'il y a plusieurs résultats de recherche, obtenez-les dans la liste
//La valeur de recherche est transmise en tant qu'objet
List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, new Object[] {id, name, age});

Exemple d'échec

//instruction SQL
String query = "SELECT"  
  + " employee_id,"  
  + " employee_name,"  
  + " age"  
  + " FROM employee"  
  + " WHERE employee_id=:id"  
  + " or employee_name LIKE :name"  
  + " or age=:age";

//Utiliser la carte
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("id", id);
parameters.put("name", name);
parameters.put("age", age);

List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, parameters);

//Utilisez SqlParameterSource
SqlParameterSource parameters = new MapSqlParameterSource("id", id)
                                    .addValue("name", name)
                                    .addValue("name", age);

List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, parameters);

Tâche

Je voulais vraiment rendre le nom ambigu dans l'instruction SQL de la classe de référentiel. Je ne pouvais pas parce que je ne pouvais pas utiliser le joker. Il y a peut-être un moyen de le décrire, mais je ne sais pas encore, donc je le rendrai possible dans un apprentissage futur.

String query = "SELECT"  
  + " employee_id,"  
  + " employee_name,"  
  + " age"  
  + " FROM employee"  
  + " WHERE employee_id=?"  
  + " or employee_name LIKE %?%" //Je ne peux pas faire ça
  + " or age=?";

Recommended Posts

[Exemple de code Spring inclus] Comment créer un formulaire et comment obtenir plusieurs enregistrements
Exécutable serveur avec Spring gradle Comment créer JAR et WAR
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
Comment créer un projet Spring Boot dans IntelliJ
[Spring Boot] Comment créer un projet (pour les débutants)
Comment créer une méthode
Comment créer un formulaire pour sélectionner une date dans le calendrier
Comment créer et lancer un Dockerfile pour Payara Micro
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
Comment charger un fichier de téléchargement Spring et afficher son contenu
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
[Swift5] Comment créer un écran de démarrage
[rails] Comment créer un modèle partiel
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Comment créer une méthode pratique qui utilise des génériques et une interface fonctionnelle
Comment créer votre propre annotation en Java et obtenir la valeur
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
[Spring Boot] Comment obtenir des propriétés dynamiquement à partir d'une chaîne contenue dans une URL
Comment créer une base de données H2 n'importe où
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Comment obtenir un heapdump à partir d'un conteneur Docker
Comment créer des pages pour le tableau "kaminari"
Comment créer une classe qui hérite des informations de classe
Comment créer plusieurs menus déroulants avec ActiveHash
Comment ajouter un chemin de classe dans Spring Boot
Comment créer un thème dans Liferay 7 / DXP
Comment créer une condition de recherche impliquant plusieurs modèles
[1st] Comment créer un projet de framework Spring-MVC
Comment créer facilement un pull-down avec des rails
[Rails] Comment créer un bouton de partage Twitter
[Rails] Comment émettre des messages de réussite et d'erreur
Comment définir plusieurs orm.xml dans Spring4, JPA2.1
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
Jusqu'à ce que vous créiez un projet Spring Boot dans Intellij et que vous le transmettiez à Github
Comment créer un en-tête ou un pied de page une fois et l'utiliser sur une autre page
Créez une clé privée / clé publique dans CentOS8.2 et connectez-vous à SSH avec VS Code
Comment créer un environnement Java en seulement 3 secondes
Comment écrire un test unitaire pour Spring Boot 2
Comment créer une URL JDBC (Oracle Database, Thin)
Comment créer un URI de données (base64) en Java
[Java] Comment obtenir une requête par communication HTTP
Comment afficher un aperçu du navigateur avec VS Code
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment créer et exécuter des objets de classe Méthode, Proc, Méthode
(Ruby on Rails6) Comment créer un modèle et une table
[Kotlin] Comment obtenir l'adresse IP et l'agent utilisateur
[Offre d'abonnement Apple] Comment créer une signature d'offre promotionnelle
Comment créer docker-compose
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Branchement conditionnel Java: comment créer et étudier des instructions de commutation
Comment créer une image de conteneur légère pour les applications Java