[JAVA] [Spring-Beispielcode enthalten] So erstellen Sie ein Formular und erhalten mehrere Datensätze

Wie erstelle ich ein Formular und wie bekomme ich mehrere Datensätze?

Es wird in der Reihenfolge nach der Grundklasse erklärt.

Der Code wird auf GitHub veröffentlicht. Wenn Sie interessiert sind, klonen Sie ihn bitte. Klicken Sie hier für das GitHub-Repository

Diese Umgebung

Alle Tools können kostenlos verwendet werden. Wenn Sie im Terminal mit SQL arbeiten können, benötigen Sie keine SQL-Tools.

Datenbank

GitHub verfügt über SQL-Dateien für die Datenbankerstellung und Suchdaten. Bitte entsprechend der Umgebung ausführen.

HTML Obwohl es im HTML-Tag als "th: value" beschrieben wird, wird es später erläutert.

Erstellen Sie ein Suchformular

form.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"></meta>
        <title>Durchsuchen Sie tatsächlich die Datenbank</title>
    </head>
    <body>
        <h1>Suchformular</h1>
        <form method="post" action="/form/db">
Mitarbeiter-ID eingeben:<input type="text" name="Id" th:value="${id_value}" /><br>
Gib deinen Namen ein:<input type="text" name="Name" th:value="${name_value}" /><br>
Altersangabe:<input type="text" name="Age" th:value="${age_value}" /><br>
            <input type="submit" value="Suche" />
        </form>
    </body>
</html>

Erstellen Sie eine Seite, um die Ergebnisse anzuzeigen

responseDB.html


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"></meta>
        <title>Versuchen Sie, die Datenbank zu durchsuchen</title>
    </head>
    <body>
        <h1>Suchergebnisse anzeigen</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 Die folgenden vier Klassen sind erforderlich, um einen Webdienst zu erstellen.

--Repository Klasse

spring基本.jpg

Artikel zu Anmerkungen in Kürze

Repository-Klasse

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=?";

        //Suchausführung
        // queryForList =>Da es mehrere Suchergebnisse gibt, rufen Sie diese in der Liste auf
        List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, new Object[] {id, name, age});
        return employees;
    }
}

Dies ist die Antwort auf die Hauptfrage. Verwenden Sie "neues Objekt".

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

Domänenklasse

Employee.java


package com.example.demo;

import lombok.Data;

@Data
public class Employee {

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

Wenn Sie die Annotation "@ Data" verwenden, werden "getter" und "setter" automatisch erstellt, sodass die Änderung einfacher ist. Artikel über @Data in Kürze

Serviceklasse

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;

    //Da ich das Prüfergebnis als Listentyp in der Repository-Klasse erhalten habe, um mehrere Suchergebnisse zu erhalten
    //Domänenklasse, in der Daten gespeichert werden[Employee]Als Listentyp
    public List<Employee> findData(Integer id, String name, Integer age) {

        //Von der Repository-Klasse[findData]Setzt die Karte in die Liste, also holen Sie sie sich mit demselben Typ
        List<Map<String, Object>> list = formRepository.findData(id, name, age);
    
        //Generieren Sie eine Liste der Rückgabewerte von findData
        List<Employee> employees = new ArrayList<Employee>();

        //Von der Repository-Klasse[findData]Suchergebnisliste von
        //Einer nach dem anderen in der Domänenklasse[Employee]Speichern in
        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");

            //Erstellen Sie eine Employee-Instanz
            Employee employee = new Employee();
        
            //Speichern Sie den Wert im automatisch generierten Setter der Domänenklasse
            employee.setEmployeeId(employeeId);
            employee.setEmployeeName(employeeName);
            employee.setEmployeeAge(employeeAge);

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

Standardmäßig werden die Namen von "Getter" und "Setter" mit dem ersten Buchstaben des Variablennamens großgeschrieben. Es wird derjenige mit "get" und "set" sein.

employee.setEmployeeId(employeeId);

Controller-Klasse

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.Bildschirmübergang zu HTML
        return "form";
    }
    
    //Suchformular Aktionsziel
    @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);

        //Serviceklasse[findData]Ist in der Liste der Domänenklassen[Employee]Weil es gespeichert ist
        //Liste beim Empfang<Employee>
        List<Employee> employees = formService.findData(id, name, age);

        //Innerhalb der Mitarbeiter
        // {"employeeId":1, "employeeName":"Yamada Taro", "employeeAge":30}
        model.addAttribute("employees", employees);
            
        return "responseDB";
    }
}

Beschreibung von HTML

Da die im Modell registrierten "Mitarbeiter" mehrere "Mitarbeiterklassen" enthalten

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

Nacheinander aus "Mitarbeitern" extrahiert und "Mitarbeitern" zugeordnet

Mitarbeiterklasse ist

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

Da der Wert mit setter in der repository class gespeichert wurde, kann er wie folgt abgerufen werden.

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

Beispiel für einen Fehler bei der Einstellung des Suchwerts

Das Buch enthält nur ein Suchergebnis, um mehrere Daten zu erfassen Ich weiß, dass ich "queryForList" verwende, aber selbst wenn ich eine SQL-Anweisung mit einem Platzhalter schreibe Es gab ein Problem, dass der Suchwert nicht gebunden werden konnte.

Repository-Klasse

Erfolgsgeschichte

//Suchausführung
// queryForList =>Da es mehrere Suchergebnisse gibt, rufen Sie diese in der Liste auf
//Der Suchwert wird als Objekt übergeben
List<Map<String, Object>> employees = jdbcTemplate.queryForList(query, new Object[] {id, name, age});

Fehlerbeispiel

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

//Karte verwenden
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);

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

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

Aufgabe

Ich wollte den Namen in der SQL-Anweisung der Repository-Klasse unbedingt mehrdeutig machen. Ich konnte nicht, weil ich den Platzhalter nicht verwenden konnte. Es mag eine Möglichkeit geben, es zu beschreiben, aber ich weiß es noch nicht, also werde ich es in Zukunft möglich machen.

String query = "SELECT"  
  + " employee_id,"  
  + " employee_name,"  
  + " age"  
  + " FROM employee"  
  + " WHERE employee_id=?"  
  + " or employee_name LIKE %?%" //Kann das nicht machen
  + " or age=?";

Recommended Posts

[Spring-Beispielcode enthalten] So erstellen Sie ein Formular und erhalten mehrere Datensätze
Server mit Spring Gradle ausführbar So erstellen Sie JAR und WAR
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
So erstellen Sie eine Methode
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
So erstellen und starten Sie eine Docker-Datei für Payara Micro
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
So laden Sie eine Spring-Upload-Datei und zeigen ihren Inhalt an
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
[Swift5] So erstellen Sie einen Begrüßungsbildschirm
[Rails] So erstellen Sie eine Teilvorlage
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
So erstellen Sie eine bequeme Methode, die Generika und eine funktionale Schnittstelle verwendet
So erstellen Sie Ihre eigene Anmerkung in Java und erhalten den Wert
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
[Spring Boot] So rufen Sie Eigenschaften dynamisch aus einer in einer URL enthaltenen Zeichenfolge ab
So erstellen Sie überall eine H2-Datenbank
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So erhalten Sie einen Heapdump aus einem Docker-Container
So erstellen Sie Pagenationen für das "Kaminari" -Array
So erstellen Sie eine Klasse, die Klasseninformationen erbt
So erstellen Sie mit ActiveHash mehrere Pulldown-Menüs
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So erstellen Sie ein Thema in Liferay 7 / DXP
So erstellen Sie eine Suchbedingung mit mehreren Modellen
[1.] So erstellen Sie ein Spring-MVC-Framework-Projekt
So erstellen Sie einfach ein Pulldown mit Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
[Rails] So geben Sie Erfolgs- und Fehlermeldungen aus
So definieren Sie mehrere orm.xml in Spring4, JPA2.1
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
Bis Sie ein Spring Boot-Projekt in Intellij erstellen und an Github senden
So erstellen Sie eine Kopf- oder Fußzeile einmal und verwenden sie auf einer anderen Seite
Erstellen Sie in CentOS8.2 einen privaten / öffentlichen Schlüssel und stellen Sie mit VS Code eine Verbindung zu SSH her
So erstellen Sie eine Java-Umgebung in nur 3 Sekunden
So schreiben Sie einen Komponententest für Spring Boot 2
So erstellen Sie eine JDBC-URL (Oracle Database, Thin)
So erstellen Sie einen Daten-URI (base64) in Java
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
So zeigen Sie eine Browser-Vorschau mit VS-Code an
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Erstellen und Ausführen von Methoden-, Proc- und Methodenklassenobjekten
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
[Kotlin] So erhalten Sie die IP-Adresse und den Benutzeragenten
[Apple-Abonnementangebot] So erstellen Sie eine Signatur für ein Werbeangebot
So erstellen Sie Docker-Compose
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
Bedingte Java-Verzweigung: Erstellen und Studieren von switch-Anweisungen
So erstellen Sie ein leichtes Container-Image für Java-Apps