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
Tous les outils sont gratuits. Si vous pouvez travailler avec SQL dans le terminal, vous n'avez pas besoin d'outils SQL.
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.
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>
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
Article sur les annotations à venir
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});
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
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);
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";
}
}
É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>
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
//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});
//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);
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